Flutter: onTapDown function not always called
827
Make sure you use flame 0.22.0^ and use create your game class like this instead:
class MyGame extends BaseGame with TapDetector {
Squres game;
MyGame() {
final images = [
ParallaxImage("space/bg_base.png",repeat: ImageRepeat.repeat,fill: LayerFill.height),
ParallaxImage("space/bg_big_star.png",repeat: ImageRepeat.repeatY,fill: LayerFill.height),
ParallaxImage("space/bg_planet.png",repeat: ImageRepeat.repeat,fill: LayerFill.none),
];
game = Squres(images);
add(game);
}
@override
void onTapDown(TapUpDetails details) {
print("trigger");
game.onTapDown(details);
}
}
Also, remember that you don't have to override update
, resize
and render
if you only call super on them.
Author by
khoi
Updated on November 25, 2022Comments
-
khoi over 1 year
I'm new in flutter development. I add onTapdown listener if i perform any clicked action on the screen. It's worked,but the problem is sometime when i clicked,onTapdown function not get called.I don't know what problem i have done.Hope can help me solve this problem.Thank you in advance.
import 'package:flame/game.dart'; import 'package:flame/components/parallax_component.dart'; import 'package:flame/util.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); Util flameUtil = Util(); await flameUtil.fullScreen(); runApp(MyGame(flameUtil).widget); } class MyGame extends BaseGame { MyGame(Util flameUtil) { final images = [ ParallaxImage("space/bg_base.png",repeat: ImageRepeat.repeat,fill: LayerFill.height), ParallaxImage("space/bg_big_star.png",repeat: ImageRepeat.repeatY,fill: LayerFill.height), ParallaxImage("space/bg_planet.png",repeat: ImageRepeat.repeat,fill: LayerFill.none), ]; var game = Squres(images); add(game); TapGestureRecognizer tapper = TapGestureRecognizer(); tapper.onTapDown = game.onTapDown; flameUtil.addGestureRecognizer(tapper); } } class Squres extends ParallaxComponent{ Squres(List<ParallaxImage> images) : super(images){ baseSpeed = const Offset(4,0); layerDelta = const Offset(0,-50); } @override void render(Canvas canvas) { super.render(canvas); } @override void resize(Size size) { super.resize(size); } @override void update(double t) { super.update(t); } //not always trigger void onTapDown(TapDownDetails tap){ print("trigger"); } }
-
CarlosSR almost 4 yearsyour onTapDown function has a parameter, why aren't you passing any when you are calling it?
-