2017-08-14 57 views
0

我試圖做到:如何使用SDL切換點擊事件?

  • 當用戶點擊在遊戲中,用戶點擊地板磚就會如果用戶點擊一次(任何地方)顯示邊框
  • 邊界消失

我到目前爲止有:

  • 當用戶單擊遊戲,邊框周圍出現選擇瓷磚

我似乎什麼都不能找出(我用盡了一切我能想到的)

  • 如何獲得邊境接一個地點擊

關於我的代碼走開:

我有一個MouseInput類,檢查是否按下鼠標左鍵。我使用布爾變量來嘗試切換顯示瓦片邊界的變量(如果單擊)或不顯示邊界(如果再次單擊)。我有的代碼將允許邊框顯示,但我無法讓它消失另一次點擊。我無法真正展示我嘗試過的所有事情(一直試着這樣做2天,不記得我做了什麼)。這是我的代碼到目前爲止的一個總括:

bool toggle; // Set to false in constructor 
bool justPressed; // Set to false in constructor 
bool justReleased; // Set to false in constructor 

void Mouse::Update() // My custom mouse class Updating function (updates position, etc) 
{ 
    input.Update(); // My MouseInput class Updating function. 

    if (input.Left() && !toggle) // input.Left() checks if left mouse was pressed. True if it is pressed down, and false if it's not pressed. 
    { 
     // So we have pressed the mouse 
     justPressed = true; 
     justReleased = false; 
     printf("UGH FML"); 
    } 
    else if (!input.Left()) // So the mouse has been released (or hasn't clicked yet) 
    { 
     justPressed = false; 
     justReleased = true; 
    } 

    if (justPressed) 
    { 
     toggle = true; 
    } 
} 

我試過了所有我能想到的切換回到錯誤。現在我的大腦受傷了。可能有一個真正簡單的解決方案,但我無法圍繞它解決問題。建議?

+2

像'如果(事件)的邊界=邊界;' – sp2danny

回答

0

我想你要找的是下面的代碼塊:

if (input.Left() && toggle) { //mouse is pressed and toggle is already true 
    toggle = false; 
} 

你也應該刪除下面的代碼塊,因爲它會切換設置爲true,如果你按下,無論是否觸發已經真:

if (justPressed) { 
    toggle = true; 
} 

相反,您可以直接設置肘內如果對應於初始點擊:

if (input.Left() && !toggle) { //mouse is pressed and toggle is false 
    toggle = true; 
} 

正如sp2danny提到的,那些共同的兩個塊可以被簡化爲:

if (input.Left()) { //mouse is pressed 
    toggle = !toggle; 
}