单击鼠标发射方向和速度

本文关键字:速度 方向 发射 鼠标 单击 | 更新日期: 2023-09-27 17:58:05

我制作了一个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;  
}

方向很好,但速度不好。如果有人有主意。很抱歉我的英语很差,谢谢你花时间给我

单击鼠标发射方向和速度

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

当你想移动一个物体时,据我记忆所及,典型的过程是:

您的对象。位置+=方向*速度*(浮动)游戏时间。运行的游戏时间。TotalSeconds;

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

Vector2已经包含Distance(Vector2,Vector2)方法,该方法返回一个表示传递值之间距离的浮点值。您可以使用该方法计算对象和Vector2之间的距离,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;
    }
}