簡體   English   中英

C#Monogame-檢測鼠標按住

[英]C# Monogame - detect mouse hold

我正在為游戲的主菜單編寫一個復雜的GUI。 我已經創建了一個ButtonGUI類,它具有自己的構造函數,並帶有按鈕文本,文本顏色等參數。我在每個按鈕的文本后均繪制了背景紋理,以使其看起來更漂亮。 因此,我實現了一個簡單的鼠標輸入系統:

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

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

因此,我的目標是使這些按鈕看起來不錯,並具有Windows樣式的按鈕機制。 因此,我正在尋找一種代碼來檢查類似鼠標按住的事件,例如具有更改按鈕紋理的bool或我自己可以做的任何事情。 但是問題是我嘗試結合人們給出的關於previousMouseStatenewMouseState的解決方案,但是我不確定它是否像在XNA中那樣在Monogame中起作用...還是我的實現錯了? 關於您如何處理游戲中的鼠標按住鍵,我是否可以有一個更清晰的示例? 提前致謝!

如果您是說玩家可以單擊並按住(按問題標題),則在他們釋放之前什么也不會發生。 以前和當前狀態應可以很好地實現,例如。

寬恕語法上的任何錯誤,希望您可以將其視為足以構成自己的偽代碼。

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
  }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM