Flutter: функция onTapDown не всегда вызывается
Я новичок в разработке флаттера. Я добавляю прослушиватель onTapdown, если выполняю какое-либо действие с щелчком на экране. Это сработало, но проблема в том, что когда я нажимал, функция onTapdown не вызывается. Я не знаю, с какой проблемой я столкнулся. Надеюсь, что поможет мне решить эту проблему. Заранее спасибо.
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");
}
}
1 ответ
Убедитесь, что вы используете flame 0.22.0^ и вместо этого используйте create свой игровой класс следующим образом:
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);
}
}
Также помните, что вам не нужно переопределять update
, resize
а также render
если вы только назовете их супер.