2015-12-02 50 views
1

我正在爲我的遊戲主菜單編寫一個複雜的GUI。我已經用它自己的構造函數創建了一個ButtonGUI類,其中包含按鈕文本,文本顏色等參數。我在每個按鈕的文本後面都繪製了一個背景紋理,使其看起來很漂亮。所以,我實現了一個簡單的鼠標輸入系統:C#Monogame - 檢測鼠標暫停

void DetectBtnInput(ButtonGUI btn) 
{ 
    if (mouseRect.Intersects(btn.SourceRect)) 
    { 
     btn.IsHovered = true; 
     if (mouseState.LeftButton == ButtonState.Pressed) settingsWindow.isOpen = true; 
    } 
} 

這種方法被稱爲Update(GameTime gameTime)ButtonGUI類的每個實例。所以mouseRect = new Rectangle(mouseState.X, mouseState.Y, 1, 1); ButtonGUI類的每個實例都有一個Rectangle SourceRect屬性,它等於傳遞給構造函數的按鈕的位置(顯然,按鈕的大小每次都是相同的)。上述代碼背後的邏輯很簡單,如果鼠標懸停在按鈕實例SourceRectbtn.IsHovered設置爲true,它會更改文本顏色。點擊後,我的WindowGUI類實例將打開並顯示其他設置。

所以我的目標是使這些按鈕看起來不錯,並有Windows風格的按鈕機制。所以我正在尋找一個代碼來檢查鼠標持有事件,並且例如有一個bool,它改變了按鈕紋理或者我自己可以做的任何事情。但問題是,我試圖合併人們給出的關於previousMouseStatenewMouseState的解決方案,但我不確定它在Monogame中的工作方式與XNA中的工作方式一樣......或者是我的實現錯誤?我可以更清楚地瞭解如何在遊戲中處理鼠標保持功能嗎?提前致謝!

+0

如果不顯示它,我們如何判斷您的實現是否是錯誤的?告訴我們你試過的東西。 – tzachs

回答

0

如果您的意思是玩家可以點擊並按住(按問題標題),並且直到他們釋放後纔會發生任何事情。以前和現在的狀態應該可以很好地工作,例如。

原諒在語法上的任何錯誤,希望你可以把它當作僞代碼來創建你自己的。

MouseState prev, curr; 
curr = GetMouseState(); 

update() 
{ 
    prev = curr; 
    curr = GetMouseState(); 

    // Simple check for a mouse click (from being held down) 
    if (curr == MouseState.Up && prev == MouseState.Down) 
    { 
    // Do mouse stuff here 
    } 

}