gpt4 book ai didi

ios - CADisplayLink 没有提供连续帧之间的正确时间间隔

转载 作者:行者123 更新时间:2023-11-28 21:14:37 30 4
gpt4 key购买 nike

这是我的第一篇文章。如有错误,请多多包涵。

我是 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(double timeStamp) 函数中

{

mDeltaTime = timestamp - mLastTimeStamp ;

if( mGame->IsInitialized() )
{
Update( mDeltaTime );
PreRender( mDeltaTime );
Render( mDeltaTime );
}

mLastTimeStamp = timestamp ;

std::cout<<"\nFPS : " << 1.0/mDeltaTime ;

}

它在我的旧系统(mac book pro、OS - Yosemite、XCode 7.1)中打印正确的 fps (29 - 30)。当我升级我的系统(OS-Sierra、XCode-8.2)时,该值不正确。它在(2 fps 到 30 fps)之间变化很大,这会破坏我的游戏体验。

我还根据以下内容实现了 deltaTime 计算的变体 http://www.gamasutra.com/blogs/KwasiMensah/20110211/88949/Game_Loops_on_IOS.php#note9 .但这并没有解决问题。

任何建议都会有所帮助。

最佳答案

从您的帖子来看,您似乎正在模拟器中试用您的应用程序。它在真实设备上做同样的事情吗? CADisplayLink 在设备上比在模拟器上工作得更好。另一件事:如果你想与显示帧速率同步,你应该删除那行:

    mDisplayLink.preferredFramesPerSecond = 60 ;

最后,您可能需要检查您的更新/预渲染/渲染代码。如果处理时间过长,您将跳帧。

关于ios - CADisplayLink 没有提供连续帧之间的正确时间间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41736365/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com