Over a million developers have joined DZone.

Writing a Windows 8 Game Loop

DZone 's Guide to

Writing a Windows 8 Game Loop

· ·
Free Resource

When developing games for Windows 8 with C#  it is not immediately clear how to construct a basic game loop. For other Microsoft  platforms XNA is the obvious choice. However because Microsoft does not support XNA  in Windows 8, developers are left to their own resources. After developing several  games for Windows 8 I have compiled my experiences on the various ways to implement  a game loop for Windows 8 and C#. I invite you to read on and decide which one best  suits your needs.

If you decide to write a game using C# and XAML you may think to use a DispatcherTimer  to construct your game loop. While this works, in practice I have found its performance  to be unusable for games. Instead I have found three alternatives which provide adequate  performance without relying on the DispatcherTimer. Which one is right for you depends  on your situation. At a high level the options are:

XNA and MonoGame CompositionTarget Rendering MonoGame's GameTimer
External Dependency Yes No No
Fixed Time Step Yes No Yes
Variable Time Step Yes Yes Yes

Rely on MonoGame

If you already have a game based on XNA, are willing to take on a big dependency,  or are creating a 3D game then using MonoGame  to handle your game loop is likely your best choice. On the other hand, if you're  developing a 2D game and plan to have lots of user interface elements adopting  MonoGame may be overkill. Ultimately, you will have to decide whether you want to take  on a big external dependency and shape your code to fit into XNA's framework.


If you are unfamiliar with XNA, want to create more complex user interfaces, want  to more easily support different screen resolutions, or just want to avoid an extra  dependency then your next option is to add an event handler for the global static event  CompositionTarget.Rendering.  This event fires once per each frame. The advantage of this approach is it is very easy  to implement. Simply add the event handler and be on your way. That being said, there  is no way to know how much time has passed between frames meaning your game's updates  will be linked to the frame rate. For many games this is not acceptable.

Cherry Pick MonoGame's GameTimer

Your game may not require XNA but you may need to know how much time has elapsed  between frames. As a result the first two options do not work for you game.  Fortunately, it's possible to combine the best of both approaches.

You may be wondering how MonoGame supports a fixed time step in Windows 8. The  magic takes place in the GameTimer class. If you take a look you’ll see that  GameTimer also listens for the CompsotionTarget.Rendering event and uses a  Stopwatch  to keep track of the time between events.

Fortunately, MonoGame is an open source project licensed under the Microsoft  Public License. As a result you can simply take the GameTimer class  and add it to your project. This way you can develop a game with fixed or variable  time steps without adding an external dependency. 

Wrapping Up

Ultimately which option is best depends on your circumstances. If you plan to use XNA  then using MonoGame is a no-brainer. If not then I would recommend using MonoGame's  GameTimer. In any case, you now have the knowledge to make an informed decision. Best  of luck developing your Windows 8 game!


Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}