Delay time

Is there any way to call draw() function in every 1 sec rather than in every frame?

No… but why would you want to? if you have something that needs to happen once per second, you can look at ElapsedTime.

draw() is probably unfortunately named. Yes, it’s where you draw - but it’s also your application’s main event loop. It has to happen frequently to handle all of the other aspects of your IO - touches, the accelerometers, etc.

There’s a part of me that wishes they had instead just said “Your main.lua is executed repeatedly, and if you have a setup() function, it’ll be called once at the beginning of the program”. The result would be the same, but people wouldn’t be misled into thinking that a good way to mess with draw() timing is to limit how often it’s called. This should probably be in the FAQ…

That said, you can perform events once per second like this:

function setup()
    currentSecond = 0
    xpos = 0
end

function updatePos()
    -- This does something that happens once per second
    xpos = xpos + 20
end

function draw()
    if ElapsedTime >= currentSecond then
        -- do something, eg.
        updatePos()
        currentSecond = currentSecond + 1
    end

    -- Your drawing still happens every frame
    background(0)

    fill(255,0,0)
    ellipse( xpos, HEIGHT/2, 100, 100 )
end

For the moment, it’s best to keep drawing every frame. When retained backing support is available (update after 1.1.2) you will be able to actually draw once per second as well.

Thanks a lot bortels and Simeon for your responses.
I have understood the fact about draw() function… Thanks bortels. I was actually trying to create an analog clock where a line will rotate in every second. I managed to do that with the help of Simeon’s code. Thanks Simeon for a nice example which even made more clear how to al with draw function :slight_smile: