iPhone Gameloop从单独的线程渲染更新

时间:2009-03-06 19:12:03

标签: iphone multithreading game-loop

我是iPhone开发的新手。我有一个游戏循环设置如下。

(void)CreateGameTick:(NSTimeInterval) in_time
{
  [NSThread detachNewThreadSelector:@selector(GameTick) toTarget:self withObject:nil];
}

我的基本游戏刻度/渲染看起来像这样

(void)GameTick
{
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

  CGRect wrect = [self bounds];

  while( m_running )
  {
    [self drawRect: wrect];
  }

  [pool release];       
}

我的渲染函数被调用。然而,没有任何东西被绘制(我使用Core Graphics在派生的UIView上绘制一些线条)。

如果我通过计时器调用我的更新,那么一切都很好。

你能告诉我为什么渲染会在通过线程完成时失败吗?是否可以通过线程使其工作?

由于 富

1 个答案:

答案 0 :(得分:4)

你不能(嗯,不应该)直接调用-drawRect:相反,使用-setNeedsDisplay;然后,您的视图将在下次通过事件循环时更新。如果你在一个单独的线程中运行它,你可能需要使用performSelectorOnMainThread:。