Ik wil de spellogica en de weergave in twee verschillende loops scheiden, omdat ik niet wil dat de fps de spelsnelheid regelt. Ik probeerde dit te bereiken door een CADisplayLink te maken voor de rendering en een NSTimer voor de spellogica. Maar toen gebeurde er iets vreemds:
Soms (1 van de 15 applicatie-runs) draait het spel op een zeer lage fps (ongeveer 5-10), maar de rest van de tijd is het volledig soepel. Als ik de NSTimer van de spellogica verwijder en de twee lussen combineer, is de fps constant hoog, maar het is duidelijk geen acceptabele oplossing. Dus het lijkt erop dat soms de twee timers elkaar 'uitstellen' of iets dergelijks, maar ik begrijp de interne werking van runloops niet helemaal.
Zo maak ik de timer en de displaylink:
NSTimer *gameTimer = [[NSTimer alloc] initWithFireDate:[NSDate date] interval:1.0/60.0 target:self selector:@selector(gameTimerFired:) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:gameTimer forMode:NSDefaultRunLoopMode];
[gameTimer release];
CADisplayLink *aDisplayLink = [[UIScreen mainScreen] displayLinkWithTarget:self selector:@selector(drawFrame)];
[aDisplayLink setFrameInterval:animationFrameInterval];
[aDisplayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
self.displayLink = aDisplayLink;
Kun je me vertellen wat het fps-probleem veroorzaakt en hoe het te repareren?
Of kunt u andere oplossingen aanbevelen om de rendering en de logicakringloop te scheiden?