Difference between revisions of "love.run"
m (Add links to older love versions.) |
m (→Returns: typo) |
||
(8 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
The main function, containing the main loop. A sensible default is used when left out. | The main function, containing the main loop. A sensible default is used when left out. | ||
== Function == | == Function == | ||
+ | {{newin|[[11.0]]|110|type=variant}} | ||
+ | === Synopsis === | ||
+ | <source lang="lua"> | ||
+ | mainLoop = love.run ( ) | ||
+ | </source> | ||
+ | === Arguments === | ||
+ | None. | ||
+ | === Returns === | ||
+ | {{param|function|mainLoop|Function which handles one frame, including events and rendering, when called.}} | ||
+ | |||
+ | == Function == | ||
+ | {{oldin|[[11.0]]|110|type=variant}} | ||
=== Synopsis === | === Synopsis === | ||
<source lang="lua"> | <source lang="lua"> | ||
Line 10: | Line 22: | ||
Nothing. | Nothing. | ||
== Examples == | == Examples == | ||
− | === The default function for [[0. | + | === The default function for [[11.0]], used if you don't supply your own. === |
+ | <source lang="lua"> | ||
+ | function love.run() | ||
+ | if love.load then love.load(love.arg.parseGameArguments(arg), 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. | ||
+ | return function() | ||
+ | -- 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 or 0 | ||
+ | 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 dt = love.timer.step() 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.origin() | ||
+ | love.graphics.clear(love.graphics.getBackgroundColor()) | ||
+ | |||
+ | if love.draw then love.draw() end | ||
+ | |||
+ | love.graphics.present() | ||
+ | end | ||
+ | |||
+ | if love.timer then love.timer.sleep(0.001) end | ||
+ | end | ||
+ | end | ||
+ | </source> | ||
+ | |||
+ | === The default function for [[0.10.0]], [[0.10.1]], and [[0.10.2]], used if you don't supply your own. === | ||
<source lang="lua"> | <source lang="lua"> | ||
function love.run() | function love.run() | ||
Line 16: | Line 73: | ||
if love.math then | if love.math then | ||
love.math.setRandomSeed(os.time()) | 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 | ||
+ | </source> | ||
+ | |||
+ | === The default function for [[0.9.0]], [[0.9.1]], and [[0.9.2]], used if you don't supply your own. === | ||
+ | <source lang="lua"> | ||
+ | function love.run() | ||
+ | |||
+ | if love.math then | ||
+ | love.math.setRandomSeed(os.time()) | ||
+ | for i=1,3 do love.math.random() end | ||
end | end | ||
Line 158: | Line 268: | ||
end | end | ||
</source> | </source> | ||
+ | |||
+ | == Notes == | ||
+ | === Why is there a delay? === | ||
+ | <source lang="lua"> | ||
+ | if love.timer then love.timer.sleep(0.001) end | ||
+ | </source> | ||
+ | |||
+ | 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 == | == See Also == | ||
* [[parent::love]] | * [[parent::love]] |
Latest revision as of 00:37, 24 March 2020
The main function, containing the main loop. A sensible default is used when left out.
Contents
- 1 Function
- 2 Function
- 3 Examples
- 3.1 The default function for 11.0, used if you don't supply your own.
- 3.2 The default function for 0.10.0, 0.10.1, and 0.10.2, used if you don't supply your own.
- 3.3 The default function for 0.9.0, 0.9.1, and 0.9.2, used if you don't supply your own.
- 3.4 The default function for 0.8.0, used if you don't supply your own.
- 3.5 The default function for 0.7.0, 0.7.1 and 0.7.2, used if you don't supply your own.
- 4 Notes
- 5 See Also
- 6 Other Languages
Function
Available since LÖVE 11.0 |
This variant is not supported in earlier versions. |
Synopsis
mainLoop = love.run ( )
Arguments
None.
Returns
function mainLoop
- Function which handles one frame, including events and rendering, when called.
Function
Removed in LÖVE 11.0 |
This variant is not supported in that and later versions. |
Synopsis
love.run( )
Arguments
None.
Returns
Nothing.
Examples
The default function for 11.0, used if you don't supply your own.
function love.run()
if love.load then love.load(love.arg.parseGameArguments(arg), 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.
return function()
-- 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 or 0
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 dt = love.timer.step() 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.origin()
love.graphics.clear(love.graphics.getBackgroundColor())
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.10.0, 0.10.1, and 0.10.2, used if you don't supply your own.
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.
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.
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.
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?
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
Other Languages
Dansk –
Deutsch –
English –
Español –
Français –
Indonesia –
Italiano –
Lietuviškai –
Magyar –
Nederlands –
Polski –
Português –
Română –
Slovenský –
Suomi –
Svenska –
Türkçe –
Česky –
Ελληνικά –
Български –
Русский –
Српски –
Українська –
עברית –
ไทย –
日本語 –
正體中文 –
简体中文 –
Tiếng Việt –
한국어
More info