iPhone Gameloop rend la mise à jour à partir d'un thread séparé
-
03-07-2019 - |
Question
Je suis nouveau dans le développement iPhone. J'ai une configuration de boucle de jeu comme suit.
(void)CreateGameTick:(NSTimeInterval) in_time
{
[NSThread detachNewThreadSelector:@selector(GameTick) toTarget:self withObject:nil];
}
Mon tick / rendu du jeu de base ressemble à ceci
(void)GameTick
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
CGRect wrect = [self bounds];
while( m_running )
{
[self drawRect: wrect];
}
[pool release];
}
Ma fonction de rendu est appelée. Cependant, rien n’est dessiné (j’utilise Core Graphics pour dessiner des lignes sur une UIView dérivée).
Si j'appelle ma mise à jour via une minuterie, tout va bien.
Pouvez-vous me dire pourquoi le rendu échoue lorsque vous utilisez des threads? Et est-il possible de le faire fonctionner via des threads?
Merci Rich
La solution
Vous ne pouvez pas (bien, ne devriez pas) appeler directement -drawRect: Au lieu de cela, utilisez -setNeedsDisplay; votre vue sera ensuite mise à jour la prochaine fois dans la boucle d'événements. Si vous exécutez ceci dans un thread séparé, vous devrez peut-être utiliser performSelectorOnMainThread:.