Обновление рендеринга iPhone Gameloop из отдельного потока
-
03-07-2019 - |
Вопрос
Я новичок в разработке 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:.