2014-10-30 48 views
0

我有一個具有Arduino輸入的處理腳本。處理 - 在按鈕上按住X鍵3秒 - 忽略進一步按鈕按下

在一個按鈕按下我有一個元素'生長'和橢圓3秒,然後恢復正常。

我似乎無法解決的是如何在3秒內忽略進一步按鈕按下。

這是簡化的代碼。

int savedTime; 
int growTime = 3000; 

void setup() { 
    //Start counting milliseconds 
    savedTime = millis(); 
} 

void draw() { 
    if (arduino.digitalRead(2) == Arduino.HIGH){ 
     //Starts Timer for 'Grow' animation 
     savedTime = millis(); 
    } 

    int passedTime = millis() - savedTime; 

    if (passedTime >= growTime) { 
     opacity = 10; 
     if (circleSize > 0){ 
      scale(circleSize); 
      noStroke(); 
      circleSize -= 0.0009; 
     } 
    }else{ 
     scale(circleSize); 
     noStroke(); 
     circleSize += 0.0003; 
     opacity = 70; 
    } 
    ellipse(0, 0, circleSize, circleSize); 
} 

我瞭解自己現有的代碼檢查時看到的最後一次按下按鍵發生,有效,如果我不停地按下按鈕,「增長」效應將繼續射擊。

如何做到這一點,如果'成長'效應正在發生,進一步的按鈕被忽略?

我希望這是有道理的,我已經包括了人們需要了解的東西。這是一個更大的腳本的一部分,所以如果我錯過了一些重要的東西,請原諒我!

回答

0

您應該以某種方式存儲您已處於處理最後一個輸入的過程中,因此進一步的點擊將被忽略。

我會去與一個單獨的布爾變量,如處理,或類似的東西,並檢查你沒有處理之前更新你最後savedTime。 你也可以在沒有任何額外變量的情況下在savedTime上播放無效值,但是我認爲有了額外的變量,一切都會變得清晰起來。

bool processing = false; 
int savedTime; 
int growTime = 3000; 

void setup() { 
    //Start counting milliseconds 
    savedTime = millis(); 
} 

void draw() { 
    if (!processing && arduino.digitalRead(2) == Arduino.HIGH){ 
     //Starts Timer for 'Grow' animation 
     savedTime = millis(); 
     processing = true; 
    } 

    int passedTime = millis() - savedTime; 

    if (passedTime >= growTime) { 
     opacity = 10; 
     if (circleSize > 0){ 
      scale(circleSize); 
      noStroke(); 
      circleSize -= 0.0009; 
     } else { 
      processing = false; 
     } 
    }else{ 
     scale(circleSize); 
     noStroke(); 
     circleSize += 0.0003; 
     opacity = 70; 
    } 
    ellipse(0, 0, circleSize, circleSize); 
} 

沒有試過代碼,所以可能有一些語法錯誤。希望能幫助到你!

編輯:我認爲你不想處理任何其他輸入,直到橢圓完全減少,如果你想在3秒「增長」後處理新的輸入,你可能需要將processing = false;語句移動到在我添加的其他塊之外。

+0

謝謝。是的幾個語法修改,但你破解它。我有一種感覺,那會是這樣的,但我是新手,並且一直盯着它太久了!再次感謝。 – Steviehype 2014-10-30 23:13:52