它是我的第一篇文章。任何錯誤,請與我聯繫。CADisplayLink沒有提供連續幀之間的適當時間間隔
我是iPhone開發新手。我正在使用CADisplayLink執行我的遊戲的「更新」循環。在XCode 8.2中,我使用以下代碼來計算兩個連續幀之間的deltaTime。
裏面我AppDelegate.mm文件
{
mDisplayLink = [CADisplayLink displayLinkWithTarget: self selector:@selector(gameLoop)];
mDisplayLink.preferredFramesPerSecond = 60 ;
[mDisplayLink addToRunLoop :[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
}
裏面我gameLoop()函數
{
if (mDisplayLink==NULL) return;
mApp->CoreLoopUpdate((double)mDisplayLink.timestamp);
}
裏面我CoreLoopUpdate(雙時間戳)功能
{
mDeltaTime = timestamp - mLastTimeStamp ;
if(mGame->IsInitialized())
{
Update(mDeltaTime);
PreRender(mDeltaTime);
Render(mDeltaTime);
}
mLastTimeStamp = timestamp ;
std::cout<<"\nFPS : " << 1.0/mDeltaTime ;
}
它打印正確的FPS (29 - 30)在我的舊系統(mac書專業版,操作系統 - 優勝美地,XCode 7.1)。當我升級我的系統(OS - Sierra,XCode - 8.2)時,值不合適。它在(2 fps到30 fps)之間劇烈變化,這會破壞我的遊戲。
我也根據 http://www.gamasutra.com/blogs/KwasiMensah/20110211/88949/Game_Loops_on_IOS.php#note9對我的deltaTime計算實施了一項變更。 但它沒有解決問題。
任何建議都會有幫助。
對不起,我離開車站2周。非常感謝你的幫助 。根據您的反饋,我在設備上檢查了它。它工作正常。再次感謝。 –