Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 鼠标点击射击方向和速度_C#_Xna_Mouse_Xna 4.0 - Fatal编程技术网

C# 鼠标点击射击方向和速度

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

我制作了一个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
因此,现在在我的头脑中,我认为:

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