最近在Cocos2d-x使用Effekseer的3D粒子时遇到了发射器的Action被延迟一帧执行的问题,我把该问题分析与解决过程写成了本文。
尝试按帧观察粒子发射器Action
方案1:Application::run()
第1帧
- 执行AppDelegate::applicationDidFinishLaunching()
- 执行场景init方法。
- play粒子。
- 设置每帧触发的粒子update。
- 执行场景init方法。
- 执行Director::drawScene()
- 执行pollEvents。因此出现了黑色窗口。
- 执行_scheduler->update。第一次update,本次update不会调用粒子update。
- 离开Director::drawScene()。因此画出了第一帧画面,此时没有出现粒子
第2帧
- 执行_scheduler->update。执行第1次粒子update。
- 本帧绘制,无粒子出现。(粒子呈现的不对,正确情况是本帧应该出现起始位置的粒子)
第3帧
- 执行_scheduler->update。执行第2次粒子update。
- 本帧绘制,粒子出现在起始位置。(粒子呈现的不对,慢了一帧)
方案2:某一次scheduler->update开始
第1帧
- 执行场景init方法。
- 手动执行第1次粒子update。也可不手动执行,没影响到绘制效果。
- 本帧