爆改车间主任github_Laya 爆改Laya IDE和Laya引擎使其支持2D粒子爆发模式

Laya 爆改Laya IDE和Laya引擎使其支持2D粒子爆发模式

@author ixenos 2019-11-01 19:47:26

1. 修改IDE的功能需要深入到/resources/app/out/vs/layaEditor路径下

1)其中,在/resources/app/out/vs/layaEditor/renderer/laya.editorUI.xml可以修改各个属性编辑器的开放属性,就像我们手动写IDE脚本一样,不过这个将会对应所有用到的实例;

1

2

3

4 .....5

2)其中,比如粒子编辑器的播放模块就可以在/resources/app/out/vs/layaEditor/h5/renders/particle/editor.max.js进行修改

3)etc.具体怎么修改IDE,直接用开发者工具进行调试定位功能代码模块

2.调试2D粒子功能得知,粒子的创建由发射基类EmitterBase的advanceTime方法负责:

1   public function advanceTime(passedTime:Number = 1, burstNum:int = 1):void{

2     _emissionTime -=passedTime;

3     if (_emissionTime < 0) return;

4     _frameTime +=passedTime;

5     if (_frameTime < minEmissionTime) return;

6     while (_frameTime >minEmissionTime) {

7       _frameTime -=minEmissionTime;

8   emit();

9     }

10   }

这个方法在一个帧循环中进行,这意味着在限定时间内尽量绘制粒子,那么我们只需要在时间判断中直接输出所有粒子,那就等于在一帧中绘制所有粒子的运动,这就是爆炸效果:

1   public function advanceTime(passedTime:Number = 1, burstNum:int = 1):void{

2     _emissionTime -=passedTime;

3     if (_emissionTime < 0) return;

4     _frameTime +=passedTime;

5     if (_frameTime < minEmissionTime) return;

6     while (_frameTime >minEmissionTime) {

7       for (var i:int = 0; i < burstNum; i++) {

8         _frameTime -=minEmissionTime;

9         emit();

10       }

11     }

12   }

这里开放burstNum参数用于控制爆炸效果(最大值是setting.maxParticles)

另外在ParticleSetting类中加入我们额外的参数:

1   public classParticleSetting {

2     /**是否爆发*/

3     public var burstEnable:Boolean = false;

4     /**播放时长*/

5     public var playDuration:Number = 2147483647;

6     ...

7   }

同时需要修改粒子载体Particle2D:

1 /**2 * 设置粒子配置数据3 * @param settings 粒子配置数据4 */

5 public function setParticleSetting(setting:ParticleSetting):void{6 _setting =setting;7

8 ...9

10 if(autoPlay) {11 start();//这里将emitter.start()修改为我们自己封装的start()12 play();13 }14 }

1 public function start():void{2 if(emitter){3 if(_setting && _setting.playDuration>0){4 emitter.start(_setting.playDuration);//同时我们也让IDE支持控制总播放时长5 }else{6 emitter.start();7 }8 }9 }

1 /**2 * 时钟前进3 * @param passedTime 时钟前进时间4 */

5 public function advanceTime(passedTime:Number = 1):void{6 if(_canvasTemplate) {7 _canvasTemplate.advanceTime(passedTime);8 }9 if(_emitter) {10 if(_setting &&_setting.burstEnable){11 _emitter.advanceTime(passedTime, _setting.maxPartices);//这里传入maxPartices表示在一帧中全部开始绘制12 }else{13 _emitter.advanceTime(passedTime);14 }15 }16 }

3.最终效果:

ccf8fcc22c64c49fe478f5e51bc554ec.png

这些数值最终导出到配置文件.part中(实质是JSON)

8eb927cf5a2ebc747dbf1d534a822e12.gif

4.在这个过程中有个曲折的地方就是,我想按官方的脚本方法来该IDE的属性面板,结果粒子的属性面板用脚本改不了,我以为没有办法了,就转而用Laya编写一个粒子编辑器,配合FileSaver.js将配置文件再保存出来,

最后再翻看的时候发现了可以直接爆改IDE。All Right! 条条大路通罗马。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值