Обновление рендеринга iPhone Gameloop из отдельного потока

StackOverflow https://stackoverflow.com/questions/620055

Вопрос

Я новичок в разработке 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).

Если я вызываю свое обновление через таймер, то все хорошо.

Можете ли вы сказать мне, почему рендеринг завершается неудачей при выполнении с помощью потоков?И возможно ли заставить это работать с помощью потоков?

Спасибо Богатый

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top