Per effettuare il porting del mio gioco su iPhone, sto provando a creare un ciclo di gioco che non usi NSTimer.Come creare un ciclo di gioco sull'iPhone senza utilizzare NSTimer
ho notato in alcuni esempi di codice che, se si utilizza NSTimer, devi configurarlo a inizio con qualcosa di simile
self.animationTimer = [NSTimer scheduledTimerWithTimeInterval:animationInterval target:self selector:@selector(drawView) userInfo:nil repeats:YES];
dove drawView sarebbe simile:
- (void)drawView
{
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
mFooModel->render();
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
}
Quando usando questa tecnica mFooModel si presenta bene, ma io invece voglio creare il mio loop di gioco che chiama drawView invece di avere NSTimer call drawView 60 volte al secondo. Vorrei qualcosa tipo:
while(gGameState != kShutDown)
{
[self drawView]
}
Sfortunatamente quando lo faccio, tutto quello che ottengo è uno schermo nero. Perché succede? Posso comunque implementare ciò che sto descrivendo qui?
Il motivo per cui voglio evitare NSTimer è perché voglio fare gli aggiornamenti di fisica e AI nel ciclo di gioco. Io uso il mio orologio/timer per tenere traccia della quantità di tempo che è trascorso in modo che io possa farlo con precisione. Il rendering avviene il più velocemente possibile. Io cerco di usare alcune delle tecniche descritte in this article
Questo è in qualche modo di una questione impulsiva (quello che si fa dopo che hai la codifica tutto il giorno, si blocca, e la speranza la risposta è lì da mattina)
Ciao ragazzi.
Grazie. Questo è un codice molto utile. – user156848
Ho dimenticato di avvertire che se hai più lavoro di 1/45esimo di secondo (o le bancarelle di runloop per più di questo) avrai degli eventi tattili di balbuzie, ritardi e altri problemi dispari. Assicurati di testare accuratamente. Aggiornare il codice per renderlo possibile, ma specifico dell'applicazione – rpetrich
Non tutto l'alloc/dealloc nel ciclo di esecuzione influisce sulle prestazioni? C'è un modo per spostare tutto fuori dal circuito? – Andrew