首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在带有扑动/火焰的游戏中检测一次滑动

如何在带有扑动/火焰的游戏中检测一次滑动
EN

Stack Overflow用户
提问于 2019-10-27 18:04:48
回答 3查看 1.5K关注 0票数 3

我想创造一个火焰扑腾的游戏。对于这个游戏,我想要检测刷卡。

我可以在教程的帮助下实现点击识别。但是我不能用滑动检测来实现它。

我的main with Taprecognition如下所示:我的main函数是

代码语言:javascript
复制
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类中,我有:

代码语言:javascript
复制
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();
    }
  }

我的player类包含:

代码语言:javascript
复制
  void onTapDown(){
    rotate();
  }

现在我想将其更改为沿滑动方向旋转,而不是沿onTapDown方向旋转。我试图以某种方式添加

代码语言:javascript
复制
  GestureDetector swiper = GestureDetector();
  swiper.onPanUpdate = game.onPanUpdate;

到我的main和

代码语言:javascript
复制
  void onPanUpdate() {

  }

到我的gameManager类。但是我找不到任何类似于TapDownDetails的平移工具。

对此有什么建议吗?

我看到了一些帮助,可以将小部件包装在GestureDetector中,并像这样使用它:

代码语言:javascript
复制
GestureDetector(onPanUpdate: (details) {
  if (details.delta.dx > 0) {
    // swiping in right direction
  }
});

但我不能让它在我的项目中发挥作用。

EN

回答 3

Stack Overflow用户

发布于 2019-11-17 06:19:58

您可以使用HorizontalDragGestureDetector (如果需要两个轴,则使用PanGestureRecognizer )在main方法中使用以下内容

代码语言:javascript
复制
HorizontalDragGestureRecognizer tapper = HorizontalDragGestureRecognizer();
tapper.onUpdate = game.dragUpdate;

然后在您的GameManager中添加以下内容

代码语言:javascript
复制
void dragUpdate(DragUpdateDetails d) {
    // using d.delta you can then track the movement and implement your rotation updade here
}

这应该会起作用:D

票数 2
EN

Stack Overflow用户

发布于 2020-05-11 09:25:11

如果你需要两个轴,你可以使用PanGestureRecognizer (正如@Marco Papula所说的)。

在main方法中使用以下代码:

代码语言:javascript
复制
PanGestureRecognizer panGestureRecognizer = PanGestureRecognizer();
panGestureRecognizer.onEnd = game.onPanUpdate;
flameUtil.addGestureRecognizer(panGestureRecognizer);

和你的onPanUpdate方法:

代码语言:javascript
复制
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;
    }
}
票数 0
EN

Stack Overflow用户

发布于 2021-03-28 14:40:59

如果您使用的是较新(v1)版本的Flame,则不再需要将其包装在您自己的GestureDetector中(自认为可以)。现在Flame已经内置了所有事件的包装器,包括平移!您可以将您的游戏与以下各项进行混合:

代码语言:javascript
复制
class MyGame extends BaseGame with PanDetector {
  // ...
}

并实现onPanUpdate以获得所需的行为;或者使用大量其他检测器(有关如何使用它的更多选项和细节,请查看documentation )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58578343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档