Обновление рендера iPhone Gameloop из отдельной ветки - PullRequest
2 голосов
/ 06 марта 2009

Я новичок в разработке для 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 Ответ

4 голосов
/ 06 марта 2009

Вы не можете (ну, не должны) вызывать -drawRect: напрямую. Вместо этого используйте -setNeedsDisplay; ваш вид будет обновлен в следующий раз через цикл событий. Если вы запускаете это в отдельном потоке, вам может потребоваться использовать executeSelectorOnMainThread:.

...