2018年7月31日
Creator 拉花喷射对象池清理
问题浮现过程:每次调用particle()函数后再点击 重新开始按钮,就会出现
问题报错代码:Cannot read property ‘clear’ of null
报错截图:
分析问题过程:
一.渲染方式不同:
1.particle函数内部制造 粒子的渲染方式是原生的 requestAnimationFrame(render);
2.而游戏的核心逻辑是通过js代码绑定到了updata上,根据游戏引擎的tick来进行渲染,
也恰恰正因为如此浮现了,不影响游戏运行,代码无错,语法也无错,控制台又报错的现象、
二.回收资源
1.原逻辑是点击重新开始直接自动释放资源执行 cc.director.loadScene(“main”);
这个时候有一个隐患:通过particle制造的粒子还没来得及全部回收完毕(既粒子离开舞台的底部可见区域),直接就点击了按钮自动释放了游戏资源,导致部分粒子没有进行对象池回收,creator 便自动释放游戏资源无法将其回收,产生报错。
所以在这里要进行手动释放,首先是加个 布尔值 判断条件为 true(开启),判断requestAnimationFrame循环过程中对象池内的粒子是否存在,如果是进行clear,如果不是 则retrue,每次点击游戏重新开始按钮的时候 也要把粒子控制开关 布尔值 = false 进行关闭,
这样的话即便没有回收完 因为我们的手动关闭,后续直接通过 cc,director.loadScene 自动回收了游戏的对象池资源,就不会出现报错的现象了.
修复版本的 fireworks.js会更新到gitlab上,
后续:fireworks.js文件还是需要不断地进行丰富与完善功能。
项目地址
手动释放时候windowReload()函数里面 手动关闭