我想將遊戲邏輯和渲染分成兩個不同的循環,因爲我不想讓fps控制遊戲速度。我試圖通過創建用於渲染的CADisplayLink和用於遊戲邏輯的NSTimer來實現此目的。但是後來發生了一件奇怪的事情:遊戲運行速度非常低(大約5-10),但其餘的時間都非常流暢。有時候(15個應用程序中有1個運行)遊戲運行速度非常低(大約5-10)。如果我移除遊戲邏輯的NSTimer並將兩個循環結合起來,那麼fps一直很高,但顯然這不是一個可接受的解決方案。所以看起來像是有時兩個計時器'拖延彼此'或類似的東西,但我並不完全瞭解runloops的內部工作。用於渲染和遊戲邏輯的獨立計時器的遊戲循環
以下是我創建的計時器和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;
你能告訴我是什麼原因造成的FPS問題,以及如何解決它?
或者你能推薦任何其他解決方案來分離渲染和遊戲邏輯循環嗎?
你不應該創建兩個循環脫離遊戲的速度和FPS ... – thedaian
然後,我怎麼能與一個循環做到這一點? – mikabast