flame releasecandidate.15 中的 onTapDown 问题

Problem with onTapDown in flame releasecandidate.15

长话短说。我在扩展小部件中使用火焰引擎。现在我正在加载六个背景以及我的 SpriteComponent class inside Game extending FlameGame with HasTappableComponents。现在我想向这个 SpriteComponent 添加一些交互,比如对点击的反应或在没有点击发生时切换动画。我不明白为什么它甚至不打印 'tap down'...

class FoxCharacter extends SpriteComponent with Tappable, HasGameRef  {

  String working = "like a charm";

  late SpriteAnimation animation;
  late SpriteAnimationComponent animationComponent2;

  Future<void> onLoad() async {
    super.onLoad();

    animation = await gameRef.loadSpriteAnimation(
      'fox.png',
      SpriteAnimationData.sequenced(
        amount: 8,
        textureSize: Vector2(64.0, 59.0),
        stepTime: 0.15,
      ),
    );

    animationComponent2 = SpriteAnimationComponent(
      animation: animation,
      size: Vector2(200.0, 200.0),
      position:Vector2(gameRef.size.x / 2 - 50, gameRef.size.y - 215),

    );

    add(animationComponent2);
    print(working);
  }

  @override
  bool onTapDown(TapDownInfo event) {
    print("tap down");
    return true;
  }

}

我尝试将 final 更改为 late 和其他一些无聊的想法,但没有结果。 如何向这个 FoxCharacter 添加交互?难不成不能在SpriteComponent中使用,只能在PositionComponent中使用?

这是因为您的 SpriteComponent (FoxCharacter) 没有大小或碰撞框,所以事件系统不知道如何检查它是否应该传递事件。它确实有一个 child (animationComponent2),也就是你在屏幕上可以看到的。

在我看来,您想使用 SpriteAnimationGroupComponent 并在该组件上设置位置和大小,然后添加您想要在该组件之间交换的所有不同动画。

您当然可以将相同的 sizeposition 设置为 SpriteComponent 而不是将它们传递给 animationComponent2,但我认为您会得到其他该部分完成后的问题。

您可以查看 SpriteAnimationGroupComponent here

的文档