【Processing】一定時間だけ継続して処理を実行する方法

Processingで一定時間後に処理を実行させる方法 Processing

一定時間だけ色を変える処理を行いたい。

Processingにおいてこのようなことがありますよね。
今回は、Processingを使って一定時間だけ処理を行う方法を紹介します。

  • クリックしたら四角形の色を5秒間だけ赤にする
  • ゲームでキャラクターがダメージを受けた時に、3秒だけキャラクターの色を変える

一定時間を処理を実行する方法

例を使って説明

クリックしたら四角形の色を5秒間だけ赤にする

という例を使って、一定時間処理を実行する方法を説明します。

次のようなコードを書くと実現できます。

boolean timerIsRunning = false;
int startTime = 0;  //タイマーを開始するとき
int elapsedTime = 0;  //タイマーが開始されてからの経過時間
int waitingTime = 5000;  //この時間だけ色を変える

void setup() {
    size(800, 500);
}

void draw() {
    fill(0, 0, 0); //通常時はこの色
    if (timerIsRunning == true) {
        updateElapsedTime();
        if (elapsedTime <= waitingTime) {
            fill(255, 0, 0); //マウスをクリックして5秒だけこの色
        } else{
            stopTimer();
        }
    }
    rect(100, 100, 100, 100);
} 

void startTimer() {
    timerIsRunning = true;
    startTime = millis();
}

void updateElapsedTime() {
    elapsedTime = millis() - startTime;
}

void stopTimer() {
    timerIsRunning = false;
}

void mouseClicked() {
    startTimer();
}

応用方法

次のことを気をつけると、一定時間色を変えるだけではなく、他のことにも応用することができます。

  1. 継続時間を設定する
  2. ここに一定時間継続したい処理を書く
  3. 継続させる処理を開始したいタイミングでstartTimerメソッドを呼び出す

コードは次のようになります。

boolean timerIsRunning = false;
int startTime = 0;  //タイマーを開始するとき
int elapsedTime = 0;  //タイマーが開始されてからの経過時間
int waitingTime = 5000;  //1.継続時間を設定する

void setup() {
    size(800, 500);
}

void draw() {
    fill(0, 0, 0); //通常時はこの色
    if (timerIsRunning == true) {
        updateElapsedTime();
        if (elapsedTime <= waitingTime) {
            //2.ここに一定時間継続したい処理を書く
        } else{
            stopTimer();
        }
    }
    rect(100, 100, 100, 100);
} 

void startTimer() {
    timerIsRunning = true;
    startTime = millis();
}

void updateElapsedTime() {
    elapsedTime = millis() - startTime;
}

void stopTimer() {
    timerIsRunning = false;
}

void mouseClicked() {
    startTimer(); //3.継続させる処理を開始したいタイミングでstartTimerメソッドを呼び出す
}

上のコードの場合、mouseClickedメソッドの定義の中でstartTimerメソッドを呼び出しています。しかしながら、必ずしもクリックしたら継続処理を始めるわけではないと思います。

継続させたい処理を始めたいタイミングでstartTimerメソッドを呼び出して見てください。呼び出してから一定時間、設定している2で設定している処理が継続して実行されます。

コメント

タイトルとURLをコピーしました