We are about to switch to a new forum software. Until then we have removed the registration on this forum.
Hello Forum!
First off: i'm new to processing, coding and everything around it, so excuse my ignorance :) I created a WASD moveable rectangle on the screen, which doubles it size when you hit the spacebar.
After that, it transforms to its original state. In between the transformation (when it's doubled), i want a delay (no specific time). I tried using time.sleep and delay, but everything seems to freeze the entire program (including the movement controls. How will I be able to only delay only the one statement?
Thanks in advance!
if space_pressed == True:
rectSize += 2
if rectSize == 200:
space_pressed = False
delay (5000)
if rectSize >= 100 and space_pressed == False:
rectSize += -2
Answers
This comes up a lot. You have been misled by the name "delay()". It does not do what you think it does, and is not useful for doing what you want. In short, do not use delay().
The function you really want is call millis(). It returns a positive number. The number it returns is the number of milliseconds since your sketch started running.
You can remember values returned by millis(). You can add a number to that remembered value, and then check if additional calls to millis() are returning number larger than that. In this way, you can make things happen after a certain number of milliseconds have passed.
Thus, the process is:
1) The keyPressed function detects the space bar press, which sets a boolean that knows the rectangle's size should increase.
2) When the rectangle's size is large enough, and that boolean is still set, then this is the first time, so we need to set up for our waiting period. We clear the boolean so we don't do this first time setup for our waiting period again, and record the current time (the number returned by millis()). We might also want to set a different boolean that tracks when we are waiting.
3) If we are waiting, compare the current value returned by millis() to our recorded time. Is the difference between the two more than some value? Were we not already decreasing the size? If yes to both, we are done waiting, so clear that boolean and start to decrease the rectangle's size.
4) Once the size has returned to normal, clear the decreasing size boolean.
Thank you for the clear explanation! I got it to work! :)
Celebrated too early.. The variable time and millis() are the same, even though time is created after rectSize == 200. so it will never get > time + 5000 :(
Your code looks very Python-y. I would check your indenting. For example, your check that rectSize >= 100 is INSIDE the if block for your rectSize == 200 condition... If you know rectSize is already 200, surely it's greater than 100!
Look again at my conditionals. They are separate.
I dedented, and it still didnt work.
For some reason, changing to this worked: :D
Thank you very much!
deindented what?
your description of the changes isn't clear. please post the entire code.
Here is the pastebin: http://pastebin.com/hZkuqN1K It is a very messy script, i am aware. keep in mind i'm very new to this ;D