2014-02-20 67 views
1

我在我的更新循環中調用以下方法來檢查是否按下了其中一個按鈕。調用方法的順序 - 爲什麼在這個例子中很重要?

private void CheckInputs() 
    { 
     if (CheckButton(startNewGameButtonTexture, startNewGameButtonPosition)) 
     { 
      //break 1 is here 
     } 

     if (CheckButton(continueCareerButtonTexture, continueCareerButtonPosition)) 
     { 
      //break 2 is here 
     } 
    } 

按鈕只是矩形和鼠標是否超過他們,並點擊被釋放CheckButton布爾返回true:

public bool CheckButton(Texture2D texture, Vector2 vector) 
    { 
     MouseState CurrentMouseState = Mouse.GetState(); 
     bool outcome; 

     if (CurrentMouseState.X > vector.X && CurrentMouseState.X < vector.X + texture.Width && 
      CurrentMouseState.Y > vector.Y && CurrentMouseState.Y < vector.Y + texture.Height) 
     { 
      if (CurrentMouseState.LeftButton == ButtonState.Released && PreviousMouseState == ButtonState.Pressed) 
      { 
       outcome = true; 
      } 
      else 
      { 
       outcome = false; 
      } 
     } 
     else 
     { 
      outcome = false; 
     } 

     PreviousMouseState = CurrentMouseState.LeftButton; 
     return outcome; 
    } 

在目前的順序,startNewGameButton有效(即調試站在休息1),但continueCareerButton不起作用(點擊按鈕不會觸發休息2)。

但是,如果我改變的檢查順序是:

private void CheckInputs() 
    { 
     if (CheckButton(continueCareerButtonTexture, continueCareerButtonPosition)) 
     { 
      //break 2 is here 
     } 

     if (CheckButton(startNewGameButtonTexture, startNewGameButtonPosition)) 
     { 
      //break 1 is here 
     } 
    } 

的continueCareerButton現在工程(突破200),但現在startNewGameButton不(突破100)。

我認爲鼠標狀態一定不能正常工作,但我無法解決原因。

回答

3

您每次檢查時都設置您的PreviousMouseState。

你應該將它設置每幀一次,要做到這一點最簡單的方法是Update()函數內部:

void Update(..) { 
    CurrentMouseState := Mouse.GetState() 

    // code... 

    PreviousMouseState = CurrentMouseState 
} 

否則將永遠只爲你CheckButton()函數的第一次調用,而不是每一個電話的工作。

+0

Doh!謝謝15char – user2056166

+0

沒問題:)我已經在過去自己做過..:\ –

2

只要按鈕被釋放,您在第一次撥打CheckButton時即將PreviousMouseState設置爲ButtonState.Released。因此,對CheckButton的第二次調用永遠不會返回true(因爲PreviousMouseState幾乎總是等於CurrentMouseState.LeftButton)。直到兩個if語句之後才設置PreviousMouseState

+0

謝謝 - 回答斯科特只因爲他先回答 – user2056166

相關問題