它是我的第一篇文章。任何错误,请与我联系。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周。非常感谢你的帮助 。根据您的反馈,我在设备上检查了它。它工作正常。再次感谢。 –