2012-12-19 127 views
2

我正在用XNA游戏工作室4.0开发2D游戏,我需要让我的“英雄”精灵拍摄一个长方形的镜头精灵。用XNA游戏工作室在2D游戏按键拍摄

当我按下左控制器进行拍摄时,镜头从我的播放器开始。到目前为止,没关系,但问题是它永远不会停止 - 它的位置永远不会去theVoid

这是我拍摄代码:

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; 
    } 
} 

一些澄清:

  • playerPosition是我的 “英雄” 精灵位置。
  • theVoidVector2 (700,700),当时我设置shotPosition = theVoid这个镜头消失了。
+6

'shotPosition.X <= shotPosition.X + 150'总是会是真的。 ..我想你可能意味着'playerPosition + 150'? – jonhopkins

回答

4

这个镜头永远不会消失,因为你每次更新都会更新shotPosition.x。您正在检查:

if (isShotted == true && (shotPosition.X <= shotPosition.X+150)) 

然后那里面if你增加shotPosition.X

shotPosition.X += shotSpeed.X * (float)gameTime.ElapsedGameTime.TotalSeconds; 

的一个选项,以解决这一问题将是检查shotPosition.X对球员位置 - 每@jonhopkins评论。如果玩家的移动速度与击球速度接近相同,他们可以跟随它,然后击球永远不会消失,这可能是也可能不是你想要的。

你的另一个选择是存储在开枪的位置,并且比较类似:

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

确保你在你的球员和对象如何坐标系中移动方面来考虑这个虽然。如果您的播放器始终是固定的x轴,可以简化的事情,如果他们可以在屏幕上运行..

+0

well if(Keyboard.GetState().IsKeyDown(Keys.LeftControl)&& isShotted == false) { isShotted = true; shotPosition = playerPosition; } 镜头的位置是playerPosition,所以这是镜头开始的位置。然后我比较我发射子弹的位置以及它的位置,所以你的脚本和我的完全一样,或者可能是我的错误。 – BorisTheBlade

+0

即时消息不更新shotPosition我只更新它,只有当我按下左Ctrl键,如果isShotted =假 – BorisTheBlade

+0

啊我知道了... shotPosition.X <= shotPosition.X + 150永远是真的 – BorisTheBlade