你所谓的跑了10帧就回调帧事件是什么意思?
是在引擎中mainLoop跑了10次还是动画走了10帧?
那个动画正常情况下,start与end事件回调间隔,引擎中mainLoop应该要跑207帧才对。
而在掉帧到20fps的时候,start与end事件回调间隔,引擎中mainLoop跑了才68帧。
在cocos中,cocostudio的动画不是按照引擎的mainLoop来跑的吗?
如果你不修改动画播放速度的话,这个动画不管你mainLoop每秒多少帧,动画的播放时间都是固定的。
那么在掉帧的环境下,还能保证逻辑的完整性吗,每个用户的手机的mainloop每秒多少帧都是不固定的,而cocostudio的动画却先播完了,显然不合理啊。
— Begin quote from ____
引用楼主panzhihao51于2015-01-14 15:45发表的 为什么在帧率低的情况下,帧事件会提早回调的? :
cocostudio2.06+cocos2dx-3.3final
我把flash的动画导到cocostudio,例子和插件都是论坛的那个。
然后我播放一个动画是从92帧到114帧的,一共22帧,在92帧加了一个start的帧事件,在114帧加了一个end事件。
在60帧是没什么问题的,但我把游戏引擎的帧率从60帧设到20帧,发现动画跑了10帧左右就回调end事件了,没有跑足22帧,求解。 http://www.cocoachina.com/bbs/job.php?action=topost&tid=281695&pid=tpc
— End quote
楼主,你遇到的这个现象并不是一个bug,你需要理解CocosStudio和Cocos2d-x里不同的帧概念。
在CocosStudio下面的动画面板,如果显示出动画长度是60帧,那么这个动画的总时长不一定是1秒。
只有当csd的帧速率是1的时候才是1秒。
楼主的鲨鱼测试例里,帧速率是0.4,因此导入到CocosStudio中,会发现1秒钟的时间下面的动画面板跑了24帧。
动画的总时长是帧速率1.0时的2.5倍。
Cocos2d-x的FPS指的是每秒渲染多少帧,即使调用setAnimationInterval改变程序的FPS,动画的总时长也不会改变。
帧速率0.4(也就是楼主所说的24FPS)的动画83帧,总时长为83/24秒。引擎用60的FPS跑这个时长的动画,则引擎一共渲染了6083/24≈221帧,楼主实测207帧,可能是因为性能不够,引擎没有跑满60FPS。
当楼主把引擎限制为每秒渲染20帧,则跑这段动画时,引擎一共渲染了2083/24≈69帧,接近楼主实测的68帧,因为引擎跑满20FPS还是无压力的。
综上,楼主能够理解遇到的现象了吗?
看了楼上和东杨的解析,我理解了。
就是说cocostudio的动画播放时间无论在引擎帧率是多少的情况下,在真实世界的时间是一样的。
可以用setTimeSpeed 修改播放速度
没有自动适应cocos引擎的每秒帧率的办法吗?帧率低的时候帧事件会跳过吗?
这个需要改源码,有个计算这次loop跑了多少帧的地方,改成固定1就行