Create a simple countdown in processing

匿名 (未验证) 提交于 2019-12-03 02:20:02

问题:

I have searched up so many sites on Google to try and get this to work but NO ONE seems to have this anywhere , and if they do it's just NOT working with my program... What I am trying to achieve is to have a player recoil that when the player gets hit, he has a "x" amount of time between getting hit the first time and the second time.

So I have a Boolean "hit" = false and when he gets hit, it changes to true. Which means he can't get hit again until it's changed to false again.

So I'm trying to set up a function in my program to set a "timer" for "x" amount of seconds IF hit = true and once that timer hits "x" amount of seconds, hit will get switched back to false.

Anyone have any ideas?

Thanks!!

回答1:

A simple option is to manually keep track of time using millis().

You would use two variables:

  1. one to store elapsed time
  2. one to store the wait/delay time you need

In the draw() method you would check if the difference between the current time (in millis.) and the previously stored time is greater(or equal) to the delay.

If so, this would the you're cue to do whatever for the delay given and update the stored time:

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   } } 

Here's a slight variation the updates a 'needle' on screen:

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); } 

Depending on your setup/needs, you may choose to wrap something like this into a class that can be reused. This is a basic approach and should work with the Android and JavaScript versions as well (although in javascript you've got setInterval()).

If you're interested in using Java's utilities, as FrankieTheKneeMan suggested, there is a TimerTask class available and I'm sure there are plenty of resources/examples out there.

You can run a demo bellow:

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); }


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!