我想用火焰拍打游戏。对于这个游戏,我想检测滑动。
我可以在教程的帮助下实现点击识别。但是我无法通过滑动检测来实现它。
我具有Taprecognition的主要知识是这样的: 我的主要功能是
void main() async{
Util flameUtil = Util();
await flameUtil.fullScreen();
await flameUtil.setOrientation(DeviceOrientation.portraitUp);
GameManager game = GameManager();
runApp(game.widget);
TapGestureRecognizer tapper = TapGestureRecognizer();
tapper.onTapDown = game.onTapDown;
flameUtil.addGestureRecognizer(tapper);
}
在我的GameManager类中,我有:
class GameMAnager extends Game{
// a few methods like update, render and constructor
void onTapDown(TapDownDetails d) {
if (bgRect.contains(d.globalPosition)) { //bgRect is the background rectangle, so the tap works on the whole screen
player.onTapDown();
}
}
我的播放器类包含:
void onTapDown(){
rotate();
}
现在,我想将其更改为沿滑动方向旋转,而不是onTapDown。 我试图以某种方式添加
GestureDetector swiper = GestureDetector();
swiper.onPanUpdate = game.onPanUpdate;
对我的主要人
void onPanUpdate() {
}
到我的gameManager类。但是我找不到与TapDownDetails类似的东西进行平移。
对此有何建议?
我看到了一些帮助,可以将小部件包装在GestureDetector中并像这样使用它:
GestureDetector(onPanUpdate: (details) {
if (details.delta.dx > 0) {
// swiping in right direction
}
});
但是我无法在我的项目中使用它。
答案 0 :(得分:0)
您可以使用HorizontalDragGestureDetector(如果需要两个轴,也可以使用PanGestureRecognizer) 在您的主要方法中使用以下内容
=C6="West"
,然后在GameManager中添加以下内容
HorizontalDragGestureRecognizer tapper = HorizontalDragGestureRecognizer();
tapper.onUpdate = game.dragUpdate;
这应该可以解决问题:D
答案 1 :(得分:0)
如果需要两个轴,则可以使用PanGestureRecognizer(如@Marco Papula所说)。
在您的主要方法中使用它:
PanGestureRecognizer panGestureRecognizer = PanGestureRecognizer();
panGestureRecognizer.onEnd = game.onPanUpdate;
flameUtil.addGestureRecognizer(panGestureRecognizer);
和您的onPanUpdate方法:
void onPanUpdate(DragEndDeatils d) {
if(d.velocity.pixelsPerSecond.dx.abs()>d.velocity.pixelsPerSecond.dy.abs()) {
// X Axis
snake.velocity = d.velocity.pixelsPerSecond.dx<0 ? LeftSwipe : RightSwipe;
} else {
// Y Axis
snake.velocity = d.velocity.pixelsPerSecond.dy<0 ? UpSwipe : DownSwipe;
}
}
答案 2 :(得分:0)
如果您使用的是较新 (v1) 版本的 Flame,则不再需要将其包装在您自己的 GestureDetector 中(您认为可以)。现在 Flame 已经为所有事件内置了包装器,包括平移!您可以将您的游戏与:
class MyGame extends BaseGame with PanDetector {
// ...
}
并实现 onPanUpdate
以获得所需的行为;或使用各种其他检测器(查看 documentation 了解更多选项和使用方法的详细信息)。