2015-01-14 33 views
2

我想學習XNA遊戲編程,現在我想等待一個鍵被按下 我測試它:時等候的keyPressed在XNA

while (IsKeyPressed = Keyboard.GetState().IsKeyDown(key)); 

但IsKeyPressed也是如此,當鍵被釋放

回答

3

該代碼實際上是自旋鎖。 請勿使用自旋鎖

您看到的錯誤可能是,因爲您正在使用自旋鎖,它沒有得到正確更新的機會。

取而代之,您應該讀取被按下的鍵,並在與停止處理相關的任何類中設置狀態(可能在Update函數中簡單地使用if檢查)。然後,當您檢測到版本時,您將更改狀態,以便if檢查通過。

喜歡的東西:

//Main Update 
if (Keyboard.GetState().IsKeyDown(key)) 
    myObject.Wait(); 
else 
    myObject.Continue(); 

//Other object 
public void Wait() 
{ 
    waiting = true; 
} 

public void Continue() 
{ 
    waiting = false; 
} 

public void Update() 
{ 
     if (!waiting) 
     { 
     //Update state 
     } 
} 

你總是可以檢查以前的狀態,以避免調用WaitContinue多次,但那將是一個與所提供的代碼的微優化的東西。