-- TEST
-- Use this function to perform your initial setup
function setup()
print("Hello World!")
wait = 5
i = 0
end
function sectoframes(sec)
return sec * 60
end
function frametosec(frame)
return frame / 60
end
function pause(wait)
if frametosec(i) < wait then
i = i + 1
return 0
end
if i == sectoframes(wait) then
return 1
end
end
-- This function gets called once every frame
function draw()
-- This sets a dark background color
background(40, 40, 50)
-- This sets the line thickness
strokeWidth(5)
-- Do your drawing here
pausenumber = pause(5)
if pausenumber == 1 then
text("ok", WIDTH/2, HEIGHT - 100)
elseif pausenumber == 0 then
text("wait", WIDTH/2, HEIGHT - 100)
else
text("error", WIDTH/2, HEIGHT - 100)
end
end
Hello @eloi67. If you made use of ElapsedTime to keep track of the passage of time, then you would not need to count frames (or assume a constant frame rate of 60 per second).
By using the arg feature of Lua, the pause function could do two things:
(1) called with an argument, it could set the duration of the next pause (if it is not already waiting); and
(2) called with no arguments, it could only return whether or not it is waiting.
For example (touch the viewer for a two-second wait):
function setup()
fill(255)
fontSize(64)
cx = WIDTH/2
cy = HEIGHT/2
end
local isWaiting = false
local endTime
function pause(...)
if isWaiting and ElapsedTime > endTime then
isWaiting = false
end
if arg["n"] > 0 and not isWaiting then
endTime = ElapsedTime + arg[1]
isWaiting = true
end
return isWaiting
end
function draw()
background(0)
if pause() then
text("Waiting", cx, cy)
else
text("Not waiting", cx, cy)
end
end
function touched(touch)
if touch.state == BEGAN then pause(2) end
end
hello. I have found the following function in the forum. I use it in my pushball game, it works very well, once i understood the syntax to pass the callback function. It is not exactly a pause() function, but the usage of a pause function is to start something after the pause, exactly what this timer does.
-- timer class code from Barryrgo on CODEA forum (with minor changes from JMV38)
-- usage syntax for instance to launch myCall() in 2s:
-- timer1 = Timer(function() myCall() end)
-- timer1:start(2)
Timer = class()
function Timer:init(callBackFun)
-- you can accept and set parameters here
self.action = callBackFun
self.startTime = 0
self.timeDelay = 0
self.enable = false
end
function Timer:start(time)
self.startTime = ElapsedTime
self.timeDelay = time
self.enable = true
end
function Timer:reset()
self.enable = false
end
function Timer:update()
if (self.enable == true) then
local currentTime = ElapsedTime
if currentTime - self.startTime >= self.timeDelay then
self.enable = false
if type(self.action) == "function" then
self.action()
end
end
end
end
If you’re after a pause for a game or anything else, then this is pretty simple. But running this leads to a question I have about the draw function. When I run this and hit pause, I constantly show 3 numbers during the pause even though I only draw 1 number per draw cycle. It doesn’t matter how fast or slow I hit pause. Is there a 3 screen buffer being drawn during each draw cycle.
If I add another text line, then I see 6 numbers during the pause. I was expecting to see 1 number per text line, not 3.
function setup()
count=0
end
function draw()
if pause then -- if pause is true, exit the draw function
return
end
-- draw something to show that pause is working
background(40, 40, 50)
fill(255)
count = count + 1
text(count,math.random(WIDTH),math.random(HEIGHT))
end
function touched(t)
if t.state==BEGAN then
pause = not pause -- toggle pause, true or false
end
end
I took my pause program one step further by adding pause=true after the text statement. So basically I’m pausing after each draw cycle. Looking at the numbers that are displayed, I see that:
1.) There are 3 screen buffers that I saw earlier.
2.) The buffers don’t change in a regular pattern. Some of the buffers stay around for up to 8 cycles, while other buffers stay for 1 cycle. Interesting how the draw function works.
function setup()
count=0
end
function draw()
if pause then -- if pause is true, exit the draw function
return
end
-- draw something to show if pause is working
background(40, 40, 50)
fill(255)
count = count + 1
text(count,math.random(WIDTH),math.random(HEIGHT))
pause=true
end
function touched(t)
if t.state==BEGAN then
pause = not pause -- toggle pause, true, false
end
end