C# 使用XNA game studio在2D游戏中使用按键进行拍摄

C# 使用XNA game studio在2D游戏中使用按键进行拍摄,c#,xna,xna-4.0,C#,Xna,Xna 4.0,我正在用XNA game studio 4.0开发一个2D游戏,我需要让我的英雄精灵拍摄一个快照精灵,它是一个矩形 当我按下左控制键射击时,射击从我的球员开始。到目前为止,它还可以,但问题是它从未停止过——它的位置永远不会消失 以下是我拍摄的代码: protected override void Update(GameTime gameTime) { if (Keyboard.GetState().IsKeyDown(Keys.LeftControl) && isShot

我正在用XNA game studio 4.0开发一个2D游戏,我需要让我的英雄精灵拍摄一个快照精灵,它是一个矩形

当我按下左控制键射击时,射击从我的球员开始。到目前为止,它还可以,但问题是它从未停止过——它的位置永远不会消失

以下是我拍摄的代码:

protected override void Update(GameTime gameTime)
{
    if (Keyboard.GetState().IsKeyDown(Keys.LeftControl) && isShotted == false)
    {
        isShotted = true;
        shotPosition = playerPosition;            
    }
    if (isShotted == true && (shotPosition.X <= shotPosition.X+150) )
    {
        shotPosition.X += shotSpeed.X * (float)gameTime.ElapsedGameTime.TotalSeconds;
    }
    else 
    { 
        isShotted = false;
        shotPosition = theVoid;
    }
}
一些澄清:

玩家位置是我的英雄精灵位置。 当我设置shotPosition=theVoid时,void是向量2700700,镜头消失。
快照永远不会消失,因为每次更新都要更新shotPosition.x。您正在检查:

if (isShotted == true && (shotPosition.X <= shotPosition.X+150) )
解决这个问题的一个方法是根据@jonhopkins注释检查shotPosition.X与玩家的位置。如果玩家能够以与射击相同的速度移动,他们可以跟随射击,然后射击将永远不会消失,这可能是你想要的,也可能不是你想要的

您的另一个选项是存储射击位置,并比较如下内容:

if (isShotted == true && (shotPosition.initialX+150 >= shotPosition.currentX) )

但是,请确保您考虑玩家和对象如何在坐标系中移动。如果你的播放器在x轴上总是静止不动的话,与它们在屏幕上运行相比,这可以简化事情

快照永远不会消失,因为每次更新都会更新shotPosition.x。您正在检查:

if (isShotted == true && (shotPosition.X <= shotPosition.X+150) )
解决这个问题的一个方法是根据@jonhopkins注释检查shotPosition.X与玩家的位置。如果玩家能够以与射击相同的速度移动,他们可以跟随射击,然后射击将永远不会消失,这可能是你想要的,也可能不是你想要的

您的另一个选项是存储射击位置,并比较如下内容:

if (isShotted == true && (shotPosition.initialX+150 >= shotPosition.currentX) )

但是,请确保您考虑玩家和对象如何在坐标系中移动。如果你的播放器在x轴上总是静止不动的话,与它们在屏幕上运行相比,这可以简化事情

shotPosition.X shotPosition.X如果Keyboard.GetState.iskeydowneys.LeftControl&&isShotted==false{isShotted=true;shotPosition=playerPosition;}快照的位置是playerPosition,因此这是快照开始的位置。然后我比较我发射子弹的位置和它的去向,所以你的脚本和我的完全一样,或者我又错了。我不更新快照位置,我只在按下左Ctrl键并且如果isShotted=falseahh我得到它时才更新它。。。谢谢各位,我成功了。真的很好的网站为我的2d游戏开发非常快速和正确answers@BorisTheBlade很高兴你成功了!关于StackOverflow,您也完全正确,它对于大多数任何类型的开发来说都是一个很好的资源。我建议您阅读和以了解这里的工作原理。在if Keyboard.GetState.iskeydowneys.LeftControl&&isShotted==false{isShotted=true;shotPosition=playerPosition;}中,快照的位置是playerPosition,因此这是快照的开始位置。然后我比较我发射子弹的位置和它的去向,所以你的脚本和我的完全一样,或者我又错了。我不更新快照位置,我只在按下左Ctrl键并且如果isShotted=falseahh我得到它时才更新它。。。谢谢各位,我成功了。真的很好的网站为我的2d游戏开发非常快速和正确answers@BorisTheBlade很高兴你成功了!关于StackOverflow,您也完全正确,它对于大多数任何类型的开发来说都是一个很好的资源。我建议你读一下这本书,了解一下这里的情况。