What is a game loop anyway? Almost every game has a game loop. Even games you might suspect do not, like turn-based games, still need to synchronize player input with drawing and AI while following the rules of the underlying operating system.
There is a constant need to update the objects in the game, perhaps by moving them, draw everything in its current position all the while responding to user input. A picture might help:
Our game loop comprises three main phases.
We already have a draw
method for handling that part of the loop. This suggests that we will have a method to do all the updating as well. We will soon code the outline of an update
method. In addition, we know that we can respond to screen touches although we will need to adapt slightly from the previous project because we are not working inside an Activity anymore.
There is a further issue in that (as I briefly mentioned) all the updating and drawing happens asynchronously to detect screen touches and listening to the operating system.
But how exactly will these three phases be looped through? How will we code this asynchronous system within which update
and draw
can be called and how will we make the loop run at the correct speed (frame rate)?
As we can probably guess, writing an efficient game loop is not as simple as a while
loop.
We need to consider timing, starting and stopping the loop as well as not causing the OS to become unresponsive because we are monopolizing the entire CPU within our single loop.
But when and how do we call our draw
method? How do we measure and keep track of the frame rate? With these things in mind, our finished game loop can probably be better represented by this next image. Notice the introduction to the concept of threads.
Now we know what we want to achieve; let's learn about threads.
3.137.220.44