2012-12-19 153 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