【问题标题】:How to make an object move towards another object in C# XNA如何使一个对象在 C# XNA 中向另一个对象移动
【发布时间】:2013-12-29 08:55:20
【问题描述】:

我目前正在尝试使一个对象向另一个对象移动。到目前为止,我有这段代码可以尝试实现它。

double angleRad = Math.Atan2(mdlPosition.Z+treeTransform.Translation.Z, mdlPosition.X-treeTransform.Translation.X);

enemyPos.X += (float)Math.Cos(angleRad) * 0.2f;
enemyPos.Z += (float)Math.Sin(angleRad) * 0.2f;

每当我移动我的玩家角色时,对象都会移动,但不会向角色当前位置移动。如何将其指向当前位置?

【问题讨论】:

    标签: c# matrix xna position angle


    【解决方案1】:

    我脑海中的一些伪代码。

    Direction = Enemy.Position - Player.Position
    Direction.Normalize()
    Enemy.Position += Direction * Speed
    

    【讨论】:

    • 唯一的错误是它向玩家相反的方向移动,所以我将它切换到 player.pos -enemy.pos。谢谢
    • 你知道我怎样才能让敌方模型面对玩家吗?
    • 试试这个:angle = Math.Atan2(direction.Y, direction.X) 使用相同的标准化Direction ...但是先生。 pinckerman 已经回答你了:)
    【解决方案2】:

    通常你应该这样做。我想你希望敌人向玩家移动。

    Vector2 dir = player.Position - enemy.Position;
    dir.Normalize();
    

    现在你只需要做每个循环:

    enemy.Position += dir * speed;
    

    编辑

    为了让敌人面对玩家,请尝试计算dir 的角度并将其设置为您的draw call 的rotation 参数。您应该使用Math.Atan2(dir.Y, dir.X)

    来实现这一点

    【讨论】:

    • 你知道我怎样才能让敌人面对玩家吗?我正在使用矩阵
    • 是的,这也适用于 Vector3。对于您的第二个问题,我将编辑我的答案。
    • 你也许可以回答我的另一个问题stackoverflow.com/questions/20520739/…,这次尝试面向前向矢量而不是对象的方向
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多