2017-09-18 43 views
0

私の無知を間違えていますが、私は、このアイデアはかなりシンプルではあるが、Processingを使ってプログラミングすることについての私の知識では挑戦的であることが判明しました。あなたは、10秒ごとに変数に1単位を追加する必要があることがわかります。これはコードです:Processingで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()とすぐtimeが、それは最後の60回を実行するif声明を出すと、それは60の追加終了9秒に達すると、1秒間に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 {} 
} 
を210

...しかし、私はそれを動作させることができませんでした。 0 - そうi = 2

i = i - toSusbracti = 2

timeif文が実行9達し、i = 1とtoSubstract = 0

i増加1:アイデアは、このようなものでしただからi = 2)。

toSusbract増加1そうtoSusbract = 1

i増加1 = 3のでi

i = i - toSusbract(= 3 iから1 = 2 SO i)。

toSusbract増加= 2

1そうtoSusbract ...プロセス

toSubstractは、それが9

ある0

time停止に再開さ59よりも大きくなっ...継続

答えて

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) 1時間を通じて取得します。

変更後、フラグをリセットします。

0

スタティック(またはグローバル)変数に最後の秒数を格納できます。現在の秒数が01より大きい場合は、iだけ増分します言語を想定し

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

はCであり、int型タイプは秒数でオーバーフローしていません。

+0

言語はProcessingです。 [tag:processing]タグに注意してください。 –

0

その他の答えは一般的なアプローチですが、Processingが提供する機能を利用していません。

たとえば、frameCount変数を使用して、経過したフレームの数を確認できます。 draw()は1秒間に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にあります。

関連する問題