2016-08-14 44 views
0

如果在短時間內點擊(意外)兩次或更多次,我如何避免我的UI按鈕運行兩次功能?快速點擊後避免使用UI按鈕兩次運行功能

我有一個UI按鈕,在我的遊戲腳本中調用了StartGame函數。我將腳本附加到檢查員的按鈕中。該函數設置一些變量以便遊戲開始。

如果我非常快速地點擊了兩次按鈕,啓動功能會執行兩次,從而導致我的變量出現問題。我如何避免這種情況?

我想分割功能,以便檢查它是否已經開始,但似乎有點複雜。 Unity UI中沒有標準設置或我錯過了一些標準代碼?試圖谷歌,但沒有太多的運氣。我的代碼

簡單的例子:

public void StartGame() { 

MenuAnimator.SetBool ("Startbutton", false); // animates my start game panel off the screen. 
lives = lives - 1; 
Do Rest of Code(); 
} 

在這種情況下,點擊菜單UI開始遊戲按鈕多次導致被扣除兩個或更多人的生命。

+0

您可以設置一個標誌(布爾)和X秒後復位。如果您需要更多詳細信息,請在您的問題上發佈您的按鈕代碼。 – Cabrra

回答

2

不需要鎖定,只需要一個布爾值可以翻動每次點擊,並且只有當布爾值爲true時按鈕纔會觸發響應。

首先點擊 - > true - >響應。

第二次點擊 - > false - >返回。

+0

謝謝,這個工作比我想象的要簡單得多。 – Killbert

0

由於我無法評論,這是我的答案。 您可以鎖定變量。

首先創建一個鎖

private readonly object _locker = new object(); 

在你鎖定屬性集/獲取

get { lock (_locker) { return this.myVar; } } 
set { lock (_locker) { this.myVar = value; } } 

現在你可以鎖定使用

public void MethodA() 
{ 
    lock(_locker) 
    { 
     if(myVar == 1) 
      myVar = 0; 
    } 
} 

這個MyVar的變量這主要是多用 - 但它應該爲你做這項工作。

1

這樣的事情呢?這將防止1秒(或包含很多你想要的)內發生的雙擊

bool buttonLocked; 
System.Timers.Timer t = new System.Timers.Timer(1000); //however many milliseconds 
t.Elapsed += new EventHandler(resetFlag); 

private void button_clicked(object sender, EventArgs e){ 
    if(!buttonLocked){ 
     // Handle Click 
     buttonLocked= true; 
     t.Enabled = true; 
    } 
} 

private void resetFlag(){ 
    buttonLocked = false; 
    t.Enabled = false; 
} 

或者你很可能只是用作爲假設定時器標誌被正確初始化的計時器是否已啓用。爲了便於閱讀,我喜歡有單獨的標誌。

完全disclosure-我在酒吧我的手機上鍵入此所以它是未經測試,但我認爲應該工作

+2

Lol @在StackOverflow上回答問題! – Killbert