2017-09-18 53 views
0

請原諒我的無知,但是我碰到了一個問題,這個問題對我目前掌握處理編程知識具有挑戰性,儘管這個想法很簡單。你看,我需要每10秒向變量添加一個單位。這是代碼:如何在處理中每10秒向變量添加+1?

int i = 0; 

void setup() 
{ 
    frameRate(60); 
} 

void draw() 
{ 

    int time = (millis() % 10000)/1000; 

    if (time == 9) 
    { 
    i++; 
    } else {} 

    System.out.println("-------------------------------\n" + 
        "Timer: " + time + "\n" 
        + "Adding 1 every 10 seconds: : " + i + "\n" 
        + "-------------------------------"); 
} 

的問題是,由於draw()儘快循環每秒60次,爲time達到9第二它最後使if聲明要執行60次,它最終將60到i每10秒,我只是需要被加1

我嘗試應用某種算法,因爲它們增加等,從而減去了不必要的數字:

int i = 1; 
int toSubstract = 0; //Variable for algorithm 

void setup() 
{ 
    frameRate(60); 
} 

void draw() 
{ 

    int time = (millis() % 10000)/1000; 

    if (time == 9) 
    { 
    i++; 
    algToSubstract(); 
    } else {} 



    System.out.println("-------------------------------\n" + 
        "Timer: " + time + "\n" 
        + "Adding 1 every 10 seconds: : " + i + "\n" 
        + "-------------------------------"); 
} 

void algToSubstract() //<--- This is the algorithm 
{ 
    i = i - toSubstract; 
    toSubstract++; 

    if (toSubstract > 59) 
    { 
    toSubstract = 0; 
    } else {} 
} 

...但我無法讓它工作。這個想法是這樣的:

time達到9,if語句執行,i = 1和toSubstract = 0

i增加1,從而i = 2

i = i - toSusbracti = 2 - 0所以i = 2)。

toSusbract增加1,從而toSusbract = 1

i增加1,從而i = 3

i = i - toSusbracti = 3 - 1,從而i = 2)。

toSusbract增加1,從而toSusbract = 2

...過程繼續...

toSubstract變得大於59,因此重新開始爲0

time停止被9.

回答

0

林戈有一個完美的解決方案。

,你可以很容易地做到這一點的另一種方式是:

bool addOnce = false; 
void draw() 
{ 
    int time = (millis() % 10000)/1000; 
    if (time == 9) 
    { 
     if(!addOnce) { 
      addOnce = true; 
      i++; 
     } 
    } else { addOnce = false; } 
} 

只要time == 9,我們只能通過if(!addOnce)一次搞定。

改變後,我們重置標誌。

0

您可以將最後秒數存儲在靜態(或全局)變量中,並且只在當前秒數高於01時遞增

void draw() { 
    static int oldsecs = 0; 
    int secs = millis()/1000; 
    if (secs > oldsecs) { 
     i++; 
     oldsecs = secs; 
    } 
    ... 

假設語言是C,並且INT類型不受秒數溢出。

+0

該語言正在處理。請注意[tag:處理]標記。 –

0

其他答案是很好的一般方法,但它們沒有充分利用Processing爲您提供的功能。

例如,您可以使用frameCount變量來檢查已經過了多少幀。由於draw()被稱爲每秒60次,10秒是600幀。事情是這樣的:

void draw(){ 
    if(frameCount % 600 == 0){ 
    // 10 seconds has elapsed 
    } 
} 

另一種方式做,這是存儲的最後時間爲10秒鐘以後,再檢查,對當前的時間,看看如果在10秒從那以後經過。類似這樣的:

int previousTime = 0; 

void draw(){ 
    if(millis() > previousTime + 10*1000){ 
     // 10 seconds has elapsed 
     previousTime = millis(); 
    } 
} 

更多信息可在the reference找到。