单击鼠标发射方向和速度
本文关键字:速度 方向 发射 鼠标 单击 | 更新日期: 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;
}
}