Domanda

Sono nuovo nello sviluppo di iPhone. Ho una configurazione del loop di gioco come segue.

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

Il mio tick / rendering di gioco di base è simile a questo

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

  CGRect wrect = [self bounds];

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

  [pool release];       
}

Viene chiamata la mia funzione di rendering. Tuttavia non viene disegnato nulla (sto usando Core Graphics per disegnare alcune linee su una UIView derivata).

Se chiamo il mio aggiornamento tramite un timer, allora va tutto bene.

Puoi dirmi perché il rendering fallisce quando viene eseguito tramite thread? Ed è possibile farlo funzionare tramite thread?

Grazie Ricco

È stato utile?

Soluzione

Non puoi (bene, non dovresti) chiamare -drawRect: direttamente. Invece, usa -setNeedsDisplay; la tua vista verrà quindi aggiornata la volta successiva attraverso il ciclo degli eventi. Se lo stai eseguendo in un thread separato, potrebbe essere necessario utilizzare performSelectorOnMainThread :.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top