如何使用基于箭头角度的颤动在火焰引擎中启动 Sprite/CircleComponent?

问题描述 投票:0回答:1

在此输入图像描述 我尝试使用火焰引擎在颤动中制作泡泡射击游戏的模拟器。 我根据图像向我的游戏添加了一个箭头(SpriteComponent)。 我尝试制作一个气泡(CircleComponent),从箭头位置发射到我瞄准箭头的角度。

我尝试过处理数学和不同的数字。 甚至询问聊天 gpt 但这没有帮助。 我得到的最接近的是,发射方向与箭头角度完全相反。

class Arrow extends SpriteComponent {
  @override
  FutureOr<void> onLoad() async {
    sprite = await Sprite.load('arrow.png');
    size = Vector2(gameWidth * 0.15, gameHeight * 0.20);
    anchor = Anchor.bottomCenter;
    position = Vector2(0, gameHeight / 2);
  }

  void aimAt(double dt) {
    double rotationSpeed = 0.02;
    angle += rotationSpeed * dt;
    angle %= 2 * math.pi;
  }
}

以及启动功能中的用法 -

void launchBubble(double angle, double speed, Arrow arrow) {
    isMoving = true;
    double launchAngle = arrow.angle + math.pi / 2; 
    double dx = math.cos(launchAngle) * speed;
    double dy = math.sin(launchAngle) * speed;
    velocity = Vector2(dx, dy);
  }
flutter dart flame
1个回答
0
投票

我得到的最接近的是发射方向与箭头角度完全相反。

这是因为Flame中的坐标系被翻转了,它是一个屏幕坐标系,越往下Y就越大。

要进行交换以便朝正确的方向启动,请将最后一行更改为此(否定

dy
):

  velocity = Vector2(dx, -dy);

对于旋转,如果您想要平滑旋转,可以将

RotateToEffect
angleTo
结合使用,或者如果您希望直接旋转但角度正确,则可以使用
lookAt
,请参阅以下示例:https:// example.flame-engine.org/#/Components_Look_At(按
< >
获取代码)。

© www.soinside.com 2019 - 2024. All rights reserved.