2017-11-04 4 views
0

나는 Arduino와 Processing으로 일종의 게임을 만들고있다. 제 코드에서는 Daniel Shiffman의 Timer 클래스를 사용하지만 클래스의 두 인스턴스를 사용하여 두 개의 다른 Timer를 만들고 싶습니다.두 개의 클래스 인스턴스가 혼재하고 있습니까?

제 문제는이 두 인스턴스가 서로 섞여있는 것처럼 보일뿐입니다. 각 인스턴스는 다른 인스턴스가 수행해야하는 작업의 일부입니다.

예를 들어 타이머를 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, totalTimepassedTime 변수가 Timer 클래스 외부에있는 문제가 발생했습니다. 기본적으로 이는 Timer 클래스의 모든 인스턴스간에 공유된다는 것을 의미합니다. 이를 확인하려면 println() 문을 사용할 수 있습니다.

문제를 해결하려면 Timer 클래스 내에서 변수를 이동하십시오. 따라서 각 인스턴스에는 고유 한 사본이 있습니다.

문제가 계속되는 경우 MCVE을 새 질문 게시글에 게시하면 거기에서 갈 것입니다. 행운을 빕니다.

+0

죄송합니다 .- 나는 Stack Overflow에 익숙하지 않습니다. 답변 해 주셔서 감사하지만 문제는 계속됩니다. 나는 새로운 지위를 만들 것이다. – tarlyo

관련 문제