Para abrir mi juego al iPhone, intento hacer un bucle de juego que no use NSTimer.Cómo hacer un bucle de juego en el iPhone sin usar NSTimer
me di cuenta de algún código de ejemplo que, si se utiliza NSTimer, lo haces con ella al comienzo con algo como
self.animationTimer = [NSTimer scheduledTimerWithTimeInterval:animationInterval target:self selector:@selector(drawView) userInfo:nil repeats:YES];
donde drawView sería algo como:
- (void)drawView
{
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
mFooModel->render();
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
}
Cuando Usando esta técnica, mFooModel funciona bien, pero en cambio quiero hacer mi propio bucle de juego que llama a drawView en lugar de tener NSTimer call drawView 60 veces por segundo. Me gustaría algo como:
while(gGameState != kShutDown)
{
[self drawView]
}
Desafortunadamente cuando hago esto, todo lo que obtengo es una pantalla en negro. ¿Por qué pasó esto? ¿Hay alguna forma de implementar lo que estoy describiendo aquí?
La razón por la que quiero evitar NSTimer es porque quiero hacer actualizaciones físicas y de inteligencia artificial en el bucle del juego. Utilizo mi propio reloj/temporizador para hacer un seguimiento de la cantidad de tiempo que ha transcurrido para poder hacer esto con precisión. La representación ocurre lo más rápido posible. Trato de usar algunas de las técnicas que se describe en this article
Esto es algo así como una pregunta impulsiva (el que se hace después de que ha estado codificando todo el día, se atascan, y esperar la respuesta está allí por la mañana)
Saludos chicos.
Gracias. Este es un código muy útil. – user156848
Olvidé advertir que si tienes más trabajo que una 1/45 de segundo (o los puestos de Runloop por más de eso) tendrás tartamudeos, eventos táctiles retrasados y otros problemas extraños. Asegúrate de probarlo a fondo. Es posible actualizar el código para contabilizar eso, pero la aplicación específica – rpetrich
¿No afecta todo el alloc/dealloc en el ciclo de ejecución al rendimiento? ¿Hay alguna manera de mover todo fuera del circuito? – Andrew