Correct way to drive Main Loop in Cocoa
Posted
by
Kyle
on Game Development
See other posts from Game Development
or by Kyle
Published on 2012-03-25T22:06:21Z
Indexed on
2012/03/25
23:42 UTC
Read the original article
Hit count: 524
I'm writing a game that currently runs in both Windows and Mac OS X. My main game loop looks like this:
while(running)
{
ProcessOSMessages(); // Using Peek/Translate message in Win32
// and nextEventMatchingMask in Cocoa
GameUpdate();
GameRender();
}
Thats obviously simplified a bit, but thats the gist of it. In Windows where I have full control over the application, it works great. Unfortunately Apple has their own way of doing things in Cocoa apps.
When I first tried to implement my main loop in Cocoa, I couldn't figure out where to put it so I created my own NSApplication
per this post. I threw my GameFrame()
right in my run
function and everything worked correctly.
However, I don't feel like its the "right" way to do it. I would like to play nicely within Apple's ecosystem rather than trying to hack a solution that works.
This article from apple describes the old way to do it, with an NSTimer
, and the "new" way to do it using CVDisplayLink
. I've hooked up the CVDisplayLink
version, but it just feels....odd. I don't like the idea of my game being driven by the display rather than the other way around.
Are my only two options to use a CVDisplayLink
or overwrite my own NSApplication
? Neither one of those solutions feels quite right.
© Game Development or respective owner