2012-09-14 31 views
7

Szukałem tak wielu witryn w Google, aby spróbować uruchomić to, ale NO ONE wydaje się mieć to wszędzie, a jeśli tak, to po prostu NIE działa z moim programem ... Co ja Próbuję osiągnąć to, że gracz cofa się, że kiedy gracz zostanie trafiony, ma "x" ilość czasu pomiędzy uderzeniem za pierwszym razem i za drugim razem.Stwórz proste odliczanie w przetwarzaniu

Mam więc Boolean "hit" = false, a kiedy zostanie trafiony, zmieni się na true. Co oznacza, że ​​nie może zostać ponownie trafiony, dopóki nie zostanie ponownie zmieniony na fałszywy.

Tak więc próbuję ustawić funkcję w moim programie, aby ustawić "timer" dla "x" ilość sekund IF hit = true, a gdy ten timer osiągnie "x" ilość sekund, hit zostanie przełączony z powrotem na false .

Ktoś ma jakieś pomysły?

Dzięki!

+0

... jakim języku? – FrankieTheKneeMan

+0

Używam przetwarzania (Java) – D34thSt4lker

Odpowiedz

14

Prostą opcją jest ręczne śledzenie czasu za pomocą millis().

byłoby użyć dwóch zmiennych:

  1. jeden do przechowywania upłynął czas
  2. jeden do przechowywania czasu oczekiwania/zwłoki potrzeba

W metodzie draw(), by sprawdzić, czy różnica między bieżącym czasem (w milisach.) a wcześniej zapisanym czasem jest większa (lub równa) opóźnieniu.

Jeśli tak, to to czy ty jesteś cue zrobić cokolwiek za opóźnienie podane i aktualizuje czas przechowywany:

int time; 
int wait = 1000; 

void setup(){ 
    time = millis();//store the current time 
} 
void draw(){ 
    //check the difference between now and the previously stored time is greater than the wait interval 
    if(millis() - time >= wait){ 
    println("tick");//if it is, do something 
    time = millis();//also update the stored time 
    } 
} 

Oto niewielkie zmiany aktualizacje a „igły” na ekranie:

int time; 
int wait = 1000; 

boolean tick; 

void setup(){ 
    time = millis();//store the current time 
    smooth(); 
    strokeWeight(3); 
} 
void draw(){ 
    //check the difference between now and the previously stored time is greater than the wait interval 
    if(millis() - time >= wait){ 
    tick = !tick;//if it is, do something 
    time = millis();//also update the stored time 
    } 
    //draw a visual cue 
    background(255); 
    line(50,10,tick ? 10 : 90,90); 
} 

W zależności od konfiguracji/potrzeb, możesz zawinąć coś takiego w klasę, która może być ponownie wykorzystana. Jest to podstawowe podejście i powinno działać również z wersjami Androida i JavaScript (chociaż w javascriptie masz setInterval()).

Jeśli interesuje Cię używanie narzędzi Java, jak zasugerował FrankieTheKneeMan, dostępna jest klasa TimerTask i jestem pewna, że ​​jest tam mnóstwo zasobów/przykładów.

można uruchomić demo poniżej:

var time; 
 
var wait = 1000; 
 

 
var tick = false; 
 

 
function setup(){ 
 
    time = millis();//store the current time 
 
    smooth(); 
 
    strokeWeight(3); 
 
} 
 
function draw(){ 
 
    //check the difference between now and the previously stored time is greater than the wait interval 
 
    if(millis() - time >= wait){ 
 
    tick = !tick;//if it is, do something 
 
    time = millis();//also update the stored time 
 
    } 
 
    //draw a visual cue 
 
    background(255); 
 
    line(50,10,tick ? 10 : 90,90); 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.4.4/p5.min.js"></script>

+0

Dzięki za to, faktycznie wymyśliłem sposób, aby zrobić to za pomocą czyjejś już dokonanej klasy. Dziękuję za twój wkład. Bardzo doceniane – D34thSt4lker

+0

Bez obaw, cieszę się, że udało się to rozwiązać. –