Um mein Spiel sauber auf das iPhone zu portieren, versuche ich eine Spielschleife zu erstellen, die NSTimer nicht verwendet.Wie mache ich eine Spielschleife auf dem iPhone, ohne NSTimer zu verwenden
bemerkte ich in einigen Beispielcode, der bei Verwendung von NSTimer, können Sie es bis zu Beginn mit etwas gesetzt hatte wie
self.animationTimer = [NSTimer scheduledTimerWithTimeInterval:animationInterval target:self selector:@selector(drawView) userInfo:nil repeats:YES];
wo drawView würde in etwa so aussehen:
- (void)drawView
{
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
mFooModel->render();
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
}
Wenn mit dieser Technik rendert mFooModel gut, aber ich möchte stattdessen meine eigene Spielschleife erstellen, die drawView aufruft, anstatt NSTimer call drawView 60 mal pro Sekunde zu haben. Ich möchte so etwas wie:
Leider, wenn ich das tue, bekomme ich nur einen schwarzen Bildschirm. Warum passiert das? Kann ich das was ich hier beschreibe implementieren?
Der Grund, warum ich NSTimer vermeiden möchte, ist, weil ich Physik und AI Updates in der Spielschleife machen will. Ich benutze meine eigene Uhr/Timer, um die Zeit zu verfolgen, die verstrichen ist, damit ich das genau machen kann. Das Rendern erfolgt so schnell wie möglich. Ich versuche, einige der Techniken, wie beschrieben zu verwenden this article
Dies ist etwas von einer impulsiven Frage (die, die Sie tun, nachdem Sie den ganzen Tag habe Codierung, stecken bleiben, und hoffen, dass die Antwort ist dort bis zum Morgen)
Prost Jungs.
Danke. Dies ist ein sehr nützlicher Code. – user156848
Ich habe vergessen zu warnen, dass, wenn Sie mehr Arbeit als 1/45. einer Sekunde haben (oder der Runloop für mehr als das hält) Sie Stottern, verzögerte Berührungsereignisse und andere seltsame Probleme haben werden. Seien Sie sicher, gründlich zu prüfen. Aktualisieren des Codes, um dies zu berücksichtigen, ist möglich, aber anwendungsspezifisch – rpetrich
Beeinträchtigt nicht die gesamte alloc/dealloc in der Ausführungsschleife die Leistung? Gibt es eine Möglichkeit, das alles außerhalb der Schleife zu bewegen? – Andrew