Iphone GLKViewController:不正确的fps
希望有一些GLKViewController专家在那里,因为我有一些问题:) 只是对我的应用程序的快速描述。我有一个UINavigationController,可以在其中推送不同的屏幕 在某个时刻,我进入我的游戏屏幕,它是UINavigationController的一个子类。在此屏幕中,在Iphone GLKViewController:不正确的fps,iphone,frame-rate,glkit,Iphone,Frame Rate,Glkit,希望有一些GLKViewController专家在那里,因为我有一些问题:) 只是对我的应用程序的快速描述。我有一个UINavigationController,可以在其中推送不同的屏幕 在某个时刻,我进入我的游戏屏幕,它是UINavigationController的一个子类。在此屏幕中,在viewdiload中,我手动创建一个EAGLContext、GLKView并实例化一个新的GLKViewController(以处理更新和绘制调用) 我将首选fps设置为30 问题是,前3-4次更新调用使
viewdiload
中,我手动创建一个EAGLContext、GLKView并实例化一个新的GLKViewController(以处理更新和绘制调用)
我将首选fps设置为30
问题是,前3-4次更新调用使用了正确的DT,但是我有2-3帧,它们之间有1秒。我使用控制器测量DT。TimesInclastUpdate
。
所以我觉得:
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秒处理下一帧,但如果有内存警告,那么你的应用程序的其他部分也需要时间来处理。我猜gl控制器将尽最大努力保持首选帧速率,但如果在后台进行大量操作,则它对此无能为力 只要确保您的代码以尽可能快的速度渲染,并且不会以与帧速率相同的方式出现峰值,那么它就不是您的渲染路径。从你的问题来看,听起来你已经测试过了 您可能要做的另一件事是注意可能传递到应用程序中的其他通知(即内存警告) 最后,慢帧是否有模式?它们是否与正在加载的新图像或文件访问一致?你事先尽可能多地做了吗?编辑-重读你的问题让我觉得你已经这么做了,对不起
抱歉,我不能再使用了:(问题是您不知道设备在刷新之间还做了什么:) 你可能只花了0.1秒处理下一帧,但如果有内存警告,那么你的应用程序的其他部分也需要时间来处理。我猜gl控制器将尽最大努力保持首选帧速率,但如果在后台进行大量操作,则它对此无能为力 只要确保您的代码以尽可能快的速度渲染,并且不会以与帧速率相同的方式出现峰值,那么它就不是您的渲染路径。从你的问题来看,听起来你已经测试过了 您可能要做的另一件事是注意可能传递到应用程序中的其他通知(即内存警告) 最后,慢帧是否有模式?它们是否与正在加载的新图像或文件访问一致?你事先尽可能多地做了吗?编辑-重读你的问题让我觉得你已经这么做了,对不起
很抱歉,我不能再使用了:(好的,所以我终于找到了答案。结果发现它甚至与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时,我总是得到它。好的,所以我终于找到了它。结果是,它甚至与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时,我总是得到它。谢谢你的回答。我所看到的唯一模式就是我所说的。我第一次注意到两次(2-3次)之后的这种大延迟我第一次进入游戏屏幕时会出现画面。如果我回到主菜单并再次尝试进入游戏,我只会在1秒左右得到画面。我会继续调查,如果我发现了什么,我会将其发布在这里。谢谢你的回答。我所看到的唯一画面正如我所说的。我第一次注意到两次(2-3次)后出现了如此大的滞后第一次进入游戏屏幕时会出现画面。如果我返回主菜单并再次尝试进入游戏,我只会在1秒左右得到画面。我会继续调查,如果我发现了什么,我会将其发布在这里。