C# 鼠标点击射击方向和速度
我制作了一个2d视频游戏。当我开火的时候,我希望子弹朝着老鼠的方向,这没关系,但是老鼠离我的英雄越远,子弹越快。这是合乎逻辑的,但我不想这样。这是我的节目C# 鼠标点击射击方向和速度,c#,xna,mouse,xna-4.0,C#,Xna,Mouse,Xna 4.0,我制作了一个2d视频游戏。当我开火的时候,我希望子弹朝着老鼠的方向,这没关系,但是老鼠离我的英雄越远,子弹越快。这是合乎逻辑的,但我不想这样。这是我的节目 posSouris = new Vector2(mouseState.X, mouseState.Y); coeffDirecteurOrientationBalleX = (pos.X - posSouris.X); coeffDirecteurOrientationBalleY = (pos.Y - posSouris.Y); // po
posSouris = new Vector2(mouseState.X, mouseState.Y);
coeffDirecteurOrientationBalleX = (pos.X - posSouris.X);
coeffDirecteurOrientationBalleY = (pos.Y - posSouris.Y);
// pos is the position of my character
因此,现在在我的头脑中,我认为:
public void Update(GameTime gt)
{
positionBalle.X = positionBalle.X - coeffDirecteurOrientationBalleX;
positionBalle.Y = positionBalle.Y - coeffDirecteurOrientationBalleY;
}
方向是好的,但速度不是。如果有人有主意。
对不起,我的英语很差,谢谢你为我花时间我已经有一段时间没有使用XNA或任何视频游戏框架了,但我会尽量说清楚 当你想要一个物体移动时,据我所知,典型的过程是: yourObject.Position+=方向*速度*(float)游戏时间.ElapsedGameTime.TotalSeconds 基本上,它是物体的位置(矢量2)+鼠标的坐标(方向)+速度+经过的游戏时间(因此它会移动不止一次,循序渐进) Vector2已经包含一个Distance(Vector2,Vector2)方法,该方法返回一个表示传递值之间距离的浮点。您可以使用该方法计算对象与表示单击时鼠标坐标的矢量2之间的距离 更新: 您可能需要查看此链接,它是一款简单的2D XNA游戏: 特别是步骤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;
}
}
void UpdateSprite(游戏时间游戏时间)
{
//按速度移动精灵,按经过的时间缩放。
精神位置+=
spriteSpeed*(float)gameTime.ElapsedGameTime.TotalSeconds;
整数最大值=
graphics.GraphicsDevice.Viewport.Width-myTexture.Width;
int MinX=0;
整数最大=
graphics.GraphicsDevice.Viewport.Height-myTexture.Height;
int MinY=0;
//检查弹跳。
if(spritePosition.X>MaxX)
{
spriteSpeed.X*=-1;
spritePosition.X=MaxX;
}
else if(spritePosition.XMaxY)
{
精灵速度Y*=-1;
spritePosition.Y=MaxY;
}
else if(spritePosition.Y