2017-11-04 9 views
0

私はArduinoとProcessingで一種のゲームを作成しています。私のコードでは、Daniel ShiffmanのクラスTimerを使用しますが、クラスの2つの異なるインスタンスを使用して2つの異なるTimerを作成したいと考えています。クラスの2つのインスタンスが混在していますか?

私の問題は、これらの2つのインスタンスが混ざっているように見えることです。

たとえば、タイマーは10秒間実行し、correctTimerは3秒間実行する必要がありますが、両方とも10秒間実行する必要があります。さらに、タイマーが終了すると、バックグラウンドを赤に設定し、correctTimerが終了したらバックグラウンドを青に設定する必要があります。ただし、両方のタイマーが終了すると背景が青に設定されます。

誰でもこれを修正する方法はありますか?

import processing.serial.*; 
int end = 10; 
String serial; 
Serial port; 
float[] array; 

// -------------------------------------------------- 

PImage img; 
PImage correct; 
PImage incorrect; 
float thumb; 
float index; 
float middle; 
float ring; 
float pinky; 

// -------------------------------------------------- 

String alphabet; 
int randomNum; 
String letter; 

// -------------------------------------------------- 

int savedTime; 
int totalTime; 
int passedTime; 
boolean quit = false; 
class Timer { 
    Timer(int tempTotalTime) { 
    totalTime = tempTotalTime; 
    } 
    void start() { 
    savedTime = millis(); 
    //quit = false; 
    } 
    boolean isFinished() { 
    passedTime = millis() - savedTime; 
    if (passedTime > totalTime) { 
     return true; 
    } else { 
     return false; 
    } 
    } 
} 
Timer timer; 
Timer correctTimer; 

// -------------------------------------------------- 

boolean checkLetter(String letterPicked, float flexR_THUMB, float flexR_INDEX, float flexR_MIDDLE, float flexR_RING, float flexR_PINKY) { 
    if (letterPicked == "A") { 
    if (flexR_THUMB > 12000 && flexR_THUMB < 22000 && 
     flexR_INDEX > 27958 && flexR_INDEX < 38500 && 
     flexR_MIDDLE > 26035 && flexR_MIDDLE < 41650 && 
     flexR_RING > 16492 && flexR_RING < 26000 && 
     flexR_PINKY > 37528 && flexR_PINKY < 53500) { 
      return true; 
     } else { 
      return false; 
    } 
    } 
return false; } 

// -------------------------------------------------- 

void setup() { 
    size(1280, 950); 
    background(255); 

    port = new Serial(this, "/dev/tty.usbmodem1421", 9600); 
    port.clear(); 
    serial = port.readStringUntil(end); 
    serial = null; 

    correct = loadImage("img/RIGHT.png"); 
    incorrect = loadImage("img/WRONG.png"); 
    correctTimer = new Timer(3000); 

    startOver(); 
} 

// -------------------------------------------------- 

void startOver() { 
    background(255); 

    letter = "A"; 

    img = loadImage("img/" + letter +".png"); 
    image(img, 0, 0, 1280, 950); 
    timer = new Timer(10000); 
    timer.start(); 
} 

// --------------------------------------------------  

void draw() { 
    while(port.available() > 0) { 
    serial = port.readStringUntil(end); 
    } 

    if (serial != null) { 
    float[] array = float(split(serial, ',')); 
    thumb = array[0]; 
    index = array[1]; 
    middle = array[2]; 
    ring = array[3]; 
    pinky = array[4]; 
    } 

    if (checkLetter(letter, thumb, index, middle, ring, pinky) == true && quit == false) { 
    image(correct, 0, 0, 1280, 950); 
    quit = true; 
    correctTimer.start(); 
    } else if (timer.isFinished() && quit == false) { 
    background(255, 0, 0); 
    quit = true; 
    correctTimer.start(); 
    } 

    if (correctTimer.isFinished()) { 
    background(0, 0, 255); 
    } 

} 

答えて

0

代わりにあなたのプロジェクト全体のMCVEを投稿してみてください。問題を示す小さな例をまとめてください。それは私たちがあなたを助けることをはるかに簡単にします。

しかし、savedTime,totalTime、およびpassedTimeという変数がTimerクラスの外にあることが原因で問題が発生しています。基本的には、それらがTimerクラスのすべてのインスタンス間で共有されていることを意味します。これを確認するにはprintln()ステートメントを使用できます。

問題を解決するには、これらの変数をTimerクラス内に移動するだけで、各インスタンスにはそれぞれ独自のコピーが作成されます。

まだ問題が解決しない場合は、MCVEを新しい質問の投稿に投稿してください。がんばろう。

+0

ごめんなさい - 私はスタックオーバーフローの新機能です。あなたの答えをありがとうが、問題は解決しない。私は新しい投稿をします。 – tarlyo

関連する問題