将方向应用于npc XNA

时间:2013-12-11 09:40:40

标签: c# matrix xna rotation

我的游戏中有NPC,它遵循脚本,在游戏中随机移动。我希望他们能够面对他们前进的方向。

for (int i = 0; i < GameConstants.NumDaleks; i++)
{
    if (dalekList[i].isActive)
    {
        Vector3 line = dalekList[i].direction;
        float rotationDal = (float)(Math.Atan2(dalekList[i].position.Y, dalekList[i].position.X) / (2 * Math.PI));

        Matrix dalekTransform = Matrix.CreateScale(GameConstants.DalekScalar) * Matrix.CreateRotationY(rotationDal) * Matrix.CreateTranslation(dalekList[i].position);
        DrawModel(mdlDalek, dalekTransform, mdDalekTransforms);
     }
}

我确定它必须与rotationDal有关,我已经尝试更改计算,但是字符似乎确实以不同方式旋转,而不是在当前方向

1 个答案:

答案 0 :(得分:0)

Xna有一个内置功能,你可能会在这里找到方便。

Matrix.CreateWorld(positionVector, DirectionVector, UpVector);

这是doc:http://msdn.microsoft.com/en-us/library/bb975261(v=xnagamestudio.40).aspx

在你的情况下:

for (int i = 0; i < GameConstants.NumDaleks; i++)
{
    if (dalekList[i].isActive)
    {
        Matrix dalekTransform = Matrix.CreateScale(GameConstants.DalekScalar) * Matrix.CreateWorld(dalekList[i].position, dalekList[i].direction, Vector3.Up);
        DrawModel(mdlDalek, dalekTransform, mdDalekTransforms);
     }
}