希望有一些GLKViewController专家,因为我有一些问题:)
只是我的应用程序的快速描述。我有一个UINavigationController,我在其中推送不同的屏幕。
在某些时候,我进入了我的游戏界面,这是UINavigationController的一个子类。在这个屏幕中,在viewDidLoad
我手动创建一个EAGLContext,GLKView并实例化一个新的GLKViewController(以处理我的更新和绘制调用)。
我设置了30的首选fps。
问题是前3-4个更新调用带有正确的DT,但是我有2-3帧,它们之间有1秒。我使用controller.timeSinceLastUpdate
测量DT。
所以我想:
dt=0.33
dt=0.33
dt=0.33
dt=1.07
dt=1.05
dt=0.33
dt=0.33
在此之后,我只有DT次有效。我不知道为什么这些帧有这种延迟。我测量了更新后的时间和绘制方法,它不到1秒钟。
另外,我没有加载任何纹理/创建任何几何体。一切都是在加载时完成的,因为它是一个相当小的游戏。
另外,如果我弹出游戏画面控制器,然后再推回游戏画面的另一个实例,这个新的GLKViewController将每隔1秒大约调用一次我的更新方法。
使用GLKViewController时,有没有人遇到帧速率问题?
谢谢,
答案 0 :(得分:1)
问题是你不知道设备在刷新之间还做了什么:)
您可能只花费0.1秒来处理下一帧,但如果有内存警告,那么您应用的其他位也需要时间来处理。我猜gl控制器最好保持首选的帧速率,但如果后台正在进行批量处理,那么它就无法做到这一点。
只要你确保你的代码尽可能快地渲染并且没有像帧速率一样尖峰,那么它就不是你的渲染路径。从你的问题来看,听起来你已经测试过了。
您可能想要做的另一件事是留意可能传递到您应用中的其他通知(即内存警告)。
最后,缓慢的帧是否存在模式 - 它们是否与正在加载的新图像或文件访问一致?你事先做过尽可能多的事吗?编辑 - 重读你的问题让我觉得你已经这样做了,对不起!
抱歉,我再也不能使用了:(
答案 1 :(得分:0)
好的,所以我终于明白了。事实证明它甚至与GLKViewController无关(惊喜!)。
这与我正在显示游戏屏幕视图控制器的方式有关,如下所示:
GameAreaViewController* gameController = [[GameAreaViewController alloc] init];
[UIView beginAnimations:@"animation" context:nil];
[self.navigationController pushViewController: gameController animated:NO];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO];
[UIView setAnimationDuration:0.7f];
[UIView commitAnimations];
SAFE_DEL(gameController);
如果我使用的动画持续时间为0.3f,那么我就不会有任何延迟。在0.5f有时我得到它,在0.7我总是得到它。