点击鼠标射击方向和速度

时间:2014-04-12 15:33:02

标签: c# xna mouse xna-4.0

我制作了一个2D视频游戏。当我解雇时,我希望子弹朝着鼠标的方向前进,它没问题,但是我的英雄远远超过鼠标,子弹的速度更快。这是逻辑,但我不想要那样。这是我的计划。

posSouris = new Vector2(mouseState.X, mouseState.Y);
coeffDirecteurOrientationBalleX = (pos.X - posSouris.X);
coeffDirecteurOrientationBalleY = (pos.Y - posSouris.Y);
// pos is the position of my character

所以现在我的udpates我做到了:

public void Update(GameTime gt)
{
     positionBalle.X = positionBalle.X - coeffDirecteurOrientationBalleX;
     positionBalle.Y = positionBalle.Y - coeffDirecteurOrientationBalleY;  
}

方向很好而不是速度。如果有人有想法。 对不起,我的英语非常糟糕,感谢你为我付出的时间

1 个答案:

答案 0 :(得分:2)

自从我使用XNA或任何视频游戏框架以来已经有一段时间了,但我会尝试尽可能清楚。

当你想要一个物体移动时,我记得的典型过程是:

yourObject.Position + = theDirection * theSpeed *(float)theGameTime.ElapsedGameTime.TotalSeconds;

基本上,它是对象的位置(Vector2)+鼠标的坐标(方向)+速度+经过的游戏时间(因此它不止一次地移动)。

Vector2已经包含Distance(Vector2,Vector2)方法,该方法返回表示传递值之间距离的float。您可以使用该方法计算对象与表示点击时鼠标坐标的Vector2之间的距离。

http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.vector2.distance.aspx

<强>更新

您可能需要查看此链接,这是一个简单的2D XNA游戏: http://msdn.microsoft.com/en-us/library/bb203893.aspx

特别是第5步,它解释了如何以速度移动对象(以及如何在运行时相应地设置速度:

void UpdateSprite(GameTime gameTime)
{
    // Move the sprite by speed, scaled by elapsed time.
    spritePosition +=
        spriteSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;

    int MaxX =
        graphics.GraphicsDevice.Viewport.Width - myTexture.Width;
    int MinX = 0;
    int MaxY =
        graphics.GraphicsDevice.Viewport.Height - myTexture.Height;
    int MinY = 0;

    // Check for bounce.
    if (spritePosition.X > MaxX)
    {
        spriteSpeed.X *= -1;
        spritePosition.X = MaxX;
    }

    else if (spritePosition.X < MinX)
    {
        spriteSpeed.X *= -1;
        spritePosition.X = MinX;
    }

    if (spritePosition.Y > MaxY)
    {
        spriteSpeed.Y *= -1;
        spritePosition.Y = MaxY;
    }

    else if (spritePosition.Y < MinY)
    {
        spriteSpeed.Y *= -1;
        spritePosition.Y = MinY;
    }
}