The game loop

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:

The game loop

Our game loop comprises three main phases.

  1. Update all game objects by moving them, detecting collisions and processing AI (artificial intelligence) if used
  2. Based on the just-updated data, draw the frame of animation in its latest state
  3. Respond to screen touches from the player

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.

Tip

Just to be clear asynchronous means that it does not occur at the same time. Our game code will work by sharing execution time with Android and the user interface. The CPU will very quickly switch back and forth between our code and Android/user input.

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.

Note

Our game loop will, however, also contain 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.

The game loop

Now we know what we want to achieve; let's learn about threads.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.137.220.44