iPhoneOS : Framerate independence

by trouf on 8/03/2010

Närsom man animerar ett objekt på egen hand (OpenGL) så måste man vara beredd på att saker och ting kan hända i resten av operativsystemet under tiden som animeringen pågår. Detta leder då till osmakliga hack i de annars så vackra rörelsemönstren.

För att lösa detta gör jag två saker.

1. Sätter upp en ”target” framerate som är referens vid alla beräkningar.
2. Räknar ut skillnaden mellan faktisk framerate och target-framerate och multiplicerar alla rörelser på skärmen med detta värde.

NÃ¥got i denhär stilen…

- (void)render {

NSDate *startDate = [[NSDate date] retain];

float wantedTime = 0.025; //Target framerate = 40 fps, dvs 1/40

/*
Rendering sker här, vi använder mätvärde från föregående frame för rörelsekompensation
*/

self.speedFactor = [[NSDate date] timeIntervalSinceDate:startDate] / wantedTime;

}

Alla rörelser multipliceras sedan med speedFactor, såsom


obj.Ypos = (sin(obj.direction*(M_PI/180))*BSPEED) * self.speedFactor;

Inga fler hack när iPhoneOS kollar din mail, uppdaterar din plats eller skickar hemliga data till Steve Jobs medan du spelar!

Andra bloggar om: , , , ,

stefan.pataky@gmail.com

No comments yet.

Write a comment: