2009-03-06 11 views
2

Je suis nouveau dans le développement de l'iPhone. J'ai une configuration de boucle de jeu comme suit.iPhone Mise à jour du rendu Gameloop à partir d'un fil séparé

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

Mon tick jeu de base/rendu ressemble à ce

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

    CGRect wrect = [self bounds]; 

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

    [pool release];  
} 

Mon rendre la fonction est appelée. Cependant rien ne se dessine (j'utilise Core Graphics pour dessiner des lignes sur un UIView dérivé).

Si j'appelle ma mise à jour via une minuterie alors tout va bien.

Pouvez-vous me dire pourquoi le rendu échoue lorsqu'il est effectué via des threads? Et est-il possible de le faire fonctionner via des threads?

Merci Rich

+0

Je ne connais pas la réponse à votre question spécifique, mais consultez [cocos2d-iphone] (http://code.google.com/p/cocos2d-iphone/). C'est un excellent framework de jeu 2D, et vous pouvez trouver plusieurs exemples de code sur le site qui peuvent vous aider. –

Répondre

4

Vous ne pouvez pas (bien, ne devrait pas) appeler -drawRect: directement. Au lieu de cela, utilisez -setNeedsDisplay; votre vue sera ensuite mise à jour la prochaine fois via la boucle d'événement. Si vous exécutez ceci dans un thread séparé, vous devrez peut-être utiliser performSelectorOnMainThread :.

Questions connexes