1 kejinlu 2014-03-13 20:13:35 +08:00 明显可以使用 Core Animation阿 少年 |
2 hxs OP @kejinlu 试过Core Animation的 CFTimeInterval localLayerTime = [myLayer convertTime:CACurrentMediaTime() fromLayer:nil]; 用这个控制时间的话,测试还是不准啊,关键是要准 |
![]() | 3 doskoi 2014-03-13 21:42:35 +08:00 CADisplayLink |
![]() | 5 wtl 2014-03-13 22:14:33 +08:00 你需要知道当前的时间 然后根据当前时间绘制 而不是根据帧率 |
6 hxs OP @wtl 我知道当前的时间也不能知道下一帧刷新的时候出现的时间啊,根据当前的时间怎么能判断我下一帧刷新的时候是不是应该显示东西呢? |
![]() | 7 ETiV 2014-03-13 2:34:56 +08:00 via iPhone 刷新可以新开个线程?大循环里取时间并刷新 绘制是另一码子事儿了…… |
![]() | 8 txx 2014-03-13 22:38:07 +08:00 我表示连cocos2d 都是基于 CADisplayLink 的.... 苹果官方文档如何打造准确的timer 就是用的 CADisplaylink |
9 hxs OP @txx 是啊CADisplayLink应该是最有可能的一个但是测了一下还是不行,有可能是因为render的东西太多了。。。。。。 |
![]() | 10 txx 2014-03-13 23:09:42 +08:00 @hxs 这个东西就要去优化 render了。用 instrument 来分析分析...哪里浪费的GPU太多能不能优化吧。就跟游戏引擎一样,他写的再好,你丢给他东西多了 也会掉帧的。 应该不能比 CADisplaylink 再快了吧?或者直接上OpenGL? |
![]() | 11 laihj 2014-03-13 23:37:38 +08:00 同10楼,UI操作都是主线程的,哪果楼主render超过了FPS,用什么计时都是没有用的 |
12 hxs OP @txx 我看了一下OpenGL的东西都是在各种变换和渲染,没找到哪个是可以准确控制时间的。如果优化render的话就是一个复杂活了。。。 |
![]() | 14 txx 2014-03-14 00:40:54 +08:00 @hxs 从cocos2d的实现上看...整个RunLoop 使用的是CADisplaylink 然后用CCSchedule封装。渲染是渲染在EAGLView上,也就是直接call OpenGL... 我的意思是 如果你发现渲染效率还低的话 就直接用OpenGL ES来做。试试看? 不过楼主你没说你到底是在渲染什么东西..... |
![]() | 15 yishanhe 2014-03-14 05:34:58 +08:00 我很好奇,iphone屏幕最大支持的刷新率是多少? |
![]() | 17 Mutoo 2014-03-14 10:52:26 +08:00 要达到60fps,绘制任务要在16ms内完成,数量上去了计算量变大,肯定达不到这个帧速率。一般游戏也没可能保持60fps。不是怎么控制的问题,是没办法保证。 60fps是一个目标,主线程会尽最大努力去接近这个目标,简单说就是,如果16ms内完成了计算,那就休息一会,等下个16ms开始,如果超过16ms了,那就没得休息继续画,这时候帧速率肯定就掉了。 |