我制作了一个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;
}
方向很好而不是速度。如果有人有想法。 对不起,我的英语非常糟糕,感谢你为我付出的时间
答案 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;
}
}