Чтобы аккуратно перенести мою игру на iPhone, я пытаюсь создать игровой цикл, в котором не используется NSTimer.
В некотором примере кода я заметил, что, если использовать NSTimer, вы вначале настроили бы его на что-то вроде
self.animationTimer = [NSTimer scheduledTimerWithTimeInterval:animationInterval target:self selector:@selector(drawView) userInfo:nil repeats:YES];
где drawView будет выглядеть примерно так:
- (void)drawView
{
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
mFooModel->render();
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
}
При использовании этой техники mFooModel хорошо отрисовывается, но вместо этого я хочу создать свой собственный игровой цикл, который вызывает drawView вместо того, чтобы NSTimer вызывал drawView 60 раз в секунду. Я хотел бы что-то вроде:
while(gGameState != kShutDown)
{
[self drawView]
}
К сожалению, когда я делаю это, все, что я получаю, это черный экран. Почему это происходит? Можно ли как-нибудь реализовать то, что я здесь описываю?
Причина, по которой я хочу избегать NSTimer, заключается в том, что я хочу делать обновления физики и ИИ в игровом цикле. Я использую свои собственные часы / таймер, чтобы отслеживать количество прошедшего времени, чтобы я мог сделать это точно. Рендеринг происходит максимально быстро. Я пытаюсь использовать некоторые методы, описанные в этой статье
Это довольно импульсивный вопрос (тот, который вы задаете после того, как весь день кодируете, застряли и надеетесь, что ответ придет к утру)
Ура, ребята.