love.run

love.run

The main function, containing the main loop. A sensible default is used when left out.

Function

Synopsis

1
love.run( )

Arguments

None.

Returns

Nothing.

Examples

The default function for 0.10.0, 0.10.1, and 0.10.2, used if you don't supply your own.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
function love.run()
  
    if love.math then
        love.math.setRandomSeed(os.time())
    end
  
    if love.load then love.load(arg) end
  
    -- We don't want the first frame's dt to include time taken by love.load.
    if love.timer then love.timer.step() end
  
    local dt = 0
  
    -- Main loop time.
    while true do
        -- Process events.
        if love.event then
            love.event.pump()
            for name, a,b,c,d,e,f in love.event.poll() do
                if name == "quit" then
                    if not love.quit or not love.quit() then
                        return a
                    end
                end
                love.handlers[name](a,b,c,d,e,f)
            end
        end
  
        -- Update dt, as we'll be passing it to update
        if love.timer then
            love.timer.step()
            dt = love.timer.getDelta()
        end
  
        -- Call update and draw
        if love.update then love.update(dt) end -- will pass 0 if love.timer is disabled
  
        if love.graphics and love.graphics.isActive() then
            love.graphics.clear(love.graphics.getBackgroundColor())
            love.graphics.origin()
            if love.draw then love.draw() end
            love.graphics.present()
        end
  
        if love.timer then love.timer.sleep(0.001) end
    end
  
end

The default function for 0.9.0, 0.9.1, and 0.9.2, used if you don't supply your own.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
function love.run()
  
    if love.math then
        love.math.setRandomSeed(os.time())
        for i=1,3 do love.math.random() end
    end
  
    if love.event then
        love.event.pump()
    end
  
    if love.load then love.load(arg) end
  
    -- We don't want the first frame's dt to include time taken by love.load.
    if love.timer then love.timer.step() end
  
    local dt = 0
  
    -- Main loop time.
    while true do
        -- Process events.
        if love.event then
            love.event.pump()
            for e,a,b,c,d in love.event.poll() do
                if e == "quit" then
                    if not love.quit or not love.quit() then
                        if love.audio then
                            love.audio.stop()
                        end
                        return
                    end
                end
                love.handlers[e](a,b,c,d)
            end
        end
  
        -- Update dt, as we'll be passing it to update
        if love.timer then
            love.timer.step()
            dt = love.timer.getDelta()
        end
  
        -- Call update and draw
        if love.update then love.update(dt) end -- will pass 0 if love.timer is disabled
  
        if love.window and love.graphics and love.window.isCreated() then
            love.graphics.clear()
            love.graphics.origin()
            if love.draw then love.draw() end
            love.graphics.present()
        end
  
        if love.timer then love.timer.sleep(0.001) end
    end
  
end

The default function for 0.8.0, used if you don't supply your own.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
function love.run()
  
    math.randomseed(os.time())
    math.random() math.random()
  
    if love.load then love.load(arg) end
  
    local dt = 0
  
    -- Main loop time.
    while true do
        -- Process events.
        if love.event then
            love.event.pump()
            for e,a,b,c,d in love.event.poll() do
                if e == "quit" then
                    if not love.quit or not love.quit() then
                        if love.audio then
                            love.audio.stop()
                        end
                        return
                    end
                end
                love.handlers[e](a,b,c,d)
            end
        end
  
        -- Update dt, as we'll be passing it to update
        if love.timer then
            love.timer.step()
            dt = love.timer.getDelta()
        end
  
        -- Call update and draw
        if love.update then love.update(dt) end -- will pass 0 if love.timer is disabled
        if love.graphics then
            love.graphics.clear()
            if love.draw then love.draw() end
        end
  
        if love.timer then love.timer.sleep(0.001) end
        if love.graphics then love.graphics.present() end
    end
  
end

The default function for 0.7.0, 0.7.1 and 0.7.2, used if you don't supply your own.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
function love.run()
  
    if love.load then love.load(arg) end
  
    local dt = 0
  
    -- Main loop time.
    while true do
        if love.timer then
            love.timer.step()
            dt = love.timer.getDelta()
        end
        if love.update then love.update(dt) end -- will pass 0 if love.timer is disabled
        if love.graphics then
            love.graphics.clear()
            if love.draw then love.draw() end
        end
  
        -- Process events.
        if love.event then
            for e,a,b,c in love.event.poll() do
                if e == "q" then
                    if not love.quit or not love.quit() then
                        if love.audio then
                            love.audio.stop()
                        end
                        return
                    end
                end
                love.handlers[e](a,b,c)
            end
        end
  
        if love.timer then love.timer.sleep(1) end
        if love.graphics then love.graphics.present() end
    end
  
end

Notes

Why is there a delay?

1
if love.timer then love.timer.sleep(0.001) end

It does a few useful things:

  • Limits FPS to 1000 if vsync isn't enabled.
  • Massively reduces CPU usage in many situations (especially with vsync disabled.)
  • Gives control back to the OS for a bit.

For more information see https://love2d.org/forums/viewtopic.php?f=4&t=76998.

See Also


doc_love
2025-01-10 15:47:30
Comments
Leave a Comment

Please login to continue.