[英]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
屬性,該屬性等於傳遞給構造函數的按鈕的位置(顯然,每次按鈕的大小都是相同的)。 上面代碼的邏輯很簡單,如果鼠標懸停在按鈕實例的SourceRect
, btn.IsHovered
設置為true,它將更改文本顏色。 單擊后,我的WindowGUI
類實例將打開並帶有其他設置。
因此,我的目標是使這些按鈕看起來不錯,並具有Windows樣式的按鈕機制。 因此,我正在尋找一種代碼來檢查類似鼠標按住的事件,例如具有更改按鈕紋理的bool
或我自己可以做的任何事情。 但是問題是我嘗試結合人們給出的關於previousMouseState
和newMouseState
的解決方案,但是我不確定它是否像在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.