Game loop
Another aspect common with game engines is that there is a loop (like a while loop) that continuously runs and keeps the game going. The order that things happen in varies, but the contents more of less look like:
- Game is started. Load game files.
- Begin loop.
- Check for input from keyboard, joystick, or other peripherals.
- Tick time in game.
- Redraw the screen.
- Go back to step 2.
During steps in the game loop, LÖVE invokes certain functions inside the love
table.
For instance, every time the screen needs to be re-drawn, the game loop invokes love.draw()
if you defined it.
In the step where LÖVE checks for user input, if there is user input, it invokes love.keypressed(PRESSED_KEY)
if we defined it.
The PRESSED_KEY
that is passes in of course depends on what key the user pressed.
When defining love.keypressed
, it may look something like this:
love.keypressed = function(pressed_key)
print('key was pressed:', pressed_key)
end
Let's modify main.lua to have a contrived example:
local current_color = {1, 1, 1, 1}
love.draw = function()
local square = {100, 100, 100, 200, 200, 200, 200, 100}
-- Initialize the square with the default color (white)
love.graphics.setColor(current_color)
-- Draw the square
love.graphics.polygon('fill', square)
end
love.keypressed = function(pressed_key)
if pressed_key == 'b' then
-- Blue
current_color = {0, 0, 1, 1}
elseif pressed_key == 'g' then
-- Green
current_color = {0, 1, 0, 1}
elseif pressed_key == 'r' then
-- Red
current_color = {1, 0, 0, 1}
elseif pressed_key == 'w' then
-- White
current_color = {1, 1, 1, 1}
end
end
When you press any of the keys, "b", "g", "r", or "w", our function love.keypressed
will be invoked and the variable pressed_key
will be a string matching one of our letters.
This changes current_color
, which is changing the color being drawn in love.draw
.
In the next section, let's see how LÖVE handles the "4. Tick time in game." step of the game loop.
Exercises
- Try adding a few more colors to the program. To understand how
love.graphics.setColor
works, see the documentation. - Make is so that if the escape key is pressed, the function
love.event.quit
is invoked and the game exits. The string to use for the escape key can be found on the wiki's KeyConstant page. Spoilers: the solution can be seen in the next section.