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脚本一样,不过这个将会对应所有用到的实例;

 <Particle className="laya.editorUI.Particle" icon="Panel" groups="常用,通用,尺寸设置,发射范围,重力模式参数,gravity,半径模式,开始弧度,结束弧度,minStartColor,maxStartColor,minEndColor,maxEndColor,positionVariance" drag="0">
<prop name="burstEnable" tips="是否爆发" type="bool" default="false" group="常用"/>
<prop name="playDuration" tips="总播放时长" type="number" default="2147483647" group="常用"/>
.....
</Particle>

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

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

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

   public function advanceTime(passedTime:Number = 1, burstNum:int = 1):void {
    _emissionTime -= passedTime;
    if (_emissionTime < 0) return;
    _frameTime += passedTime;
    if (_frameTime < minEmissionTime) return;
    while (_frameTime > minEmissionTime) {
      _frameTime -= minEmissionTime;
8       emit();
    }
  }

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

   public function advanceTime(passedTime:Number = 1, burstNum:int = 1):void {
    _emissionTime -= passedTime;
    if (_emissionTime < 0) return;
    _frameTime += passedTime;
    if (_frameTime < minEmissionTime) return;
    while (_frameTime > minEmissionTime) {
      for (var i:int = 0; i < burstNum; i++) {
        _frameTime -= minEmissionTime;
9         emit();
      }
    }
  }

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

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

   public class ParticleSetting {
    /**是否爆发*/
    public var burstEnable:Boolean = false;
    /**播放时长*/
    public var playDuration:Number = 2147483647;
    ...
  }

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

         /**
* 设置粒子配置数据
* @param settings 粒子配置数据
*/
public function setParticleSetting(setting:ParticleSetting):void {
_setting = setting; ... if (autoPlay) {
start();//这里将emitter.start()修改为我们自己封装的start()
play();
}
}
         public function start():void {
if(emitter){
if(_setting && _setting.playDuration>0){
emitter.start(_setting.playDuration);//同时我们也让IDE支持控制总播放时长
}else{
emitter.start();
}
}
}
         /**
* 时钟前进
* @param passedTime 时钟前进时间
*/
public function advanceTime(passedTime:Number = 1):void {
if (_canvasTemplate) {
_canvasTemplate.advanceTime(passedTime);
}
if (_emitter) {
if(_setting && _setting.burstEnable){
_emitter.advanceTime(passedTime, _setting.maxPartices);//这里传入maxPartices表示在一帧中全部开始绘制
}else{
_emitter.advanceTime(passedTime);
}
}
}

3.最终效果:

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

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

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

附上这个粒子编辑器的地址:https://github.com/ixenos/laya-particle-editor

 

Laya 爆改Laya IDE和Laya引擎使其支持2D粒子爆发模式的更多相关文章

  1. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇:简介及目录》(附上完整工程文件)

    G-3D引擎2D射击类游戏制作教程 游戏类型: 打飞机游戏属于射击类游戏中的一种,可以划分为卷轴射击类游戏. 视觉表现类型为:2D 框架简介: Genesis-3D引擎不仅为开发者提供一个3D游戏制作 ...

  2. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇01:播放序列动画》

    1.播放序列动画 系列动画播放概述 2D游戏中的动画系统,不同于3D游戏.3D游戏中,角色美术资源不仅包含角色模型的,还包括角色的贴图和动作等,模型本身自带角色的动作动画效果.2D游戏中,角色美术资源 ...

  3. 【转载】从零实现3D图像引擎:(2)画2D直线不简单

    原文:从零实现3D图像引擎:(2)画2D直线不简单 1. 数学分析 1) 画直线的问题 本来我以为画直线会很容易,随便拿个直线公式,遍历X求Y画出来不就完了么,但事实并非如此.以2D直线为例,因为3D ...

  4. Laya一个莫名其妙的报错laya.pathfinding

    版本2.2.0 莫名其妙,然后论坛查了下 把类库设置,不勾选这玩意就不报错了.

  5. 【learning】vim爆改记 (如何让vim用起来像devc++)

    由于本蒟蒻NOIP人品大爆发,能去冬令营,故准备开始练习使用linux下的IDE:vim 在dalao DTZ的帮助下,我装好了vim,并做了最初的配置. 然而........好难用啊,怎么和devc ...

  6. 查看MySQL是否支持InnoDB引擎以及不支持的解决办法

    通过命令行进入mysql SHOW variables like "have_%"; 显示结果中会有如下3种可能的结果: have_innodb YES have_innodb N ...

  7. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇08:弹幕系统》本系列完结

    8.弹幕系统 弹幕系统概述: 弹幕系统的设计体现了射击游戏的基本要素,玩家要在敌人放出的大量子弹(弹幕)的细小空隙间闪避,能在玩家闪躲弹幕的时候给玩家带来快感,接近满屏的子弹,增加了对玩家的视觉冲击力 ...

  8. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇07:全屏炸弹》

    7.全屏炸弹 全屏炸弹概述: 为了增设游戏的趣味性,我们制作一个游戏的基本框架以外.还会增设一些其他的额外的功能.比如5秒无敌状态.冰冻效果等.下面咱们以消灭屏幕中所有炸弹为例,看除了碰撞可以触发事件 ...

  9. 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇06:计分》

    6.计分 计分概述: 分值计量直接反应玩家在游戏中获得的成就感.因此,计分系统在游戏中显得尤为重要,有的反应在直接获取的分数上,有的反应在杀敌数量上等. 计分原理: 原理图,如图6-1所示. 图6-1 ...

随机推荐

  1. C++ Primer笔记(1)——连续读取数据、类型对应的尺寸、类型转换、字符串分行写法

    这次要看看C++ Primer,这本基本上就是必读书籍了.下面的内容就是一些之前没有学过的知识的笔记. 读取数量不定的输入数据 虽然很简单,但是还是记一下: #include <iostream ...

  2. 【Qt开发】QT中显示图像数据

    一般图像数据都是以RGBRGBRGB--字节流的方式(解码完成后的原始图像流),我说成字节流,那就表明R,G,B的值各占一个字节,在编程时表示的就是unsigned char * data. 我们先来 ...

  3. Go语言入门篇-项目常见用法&语法

    一.导入包用法: //_表示仅执行该包下的init函数(不需要整个包导入) import _ "git.xx.xx/baases/identity/cachain/version" ...

  4. 【转】centos7安装

    转自:https://blog.csdn.net/qq_42570879/article/details/82853708 1.CentOS下载CentOS是免费版,推荐在官网上直接下载,网址:htt ...

  5. java8-----lambda语法

    // -----lambda语法1------ https://www.baidu.com/link?url=6iszXQlsmyaoWVZMaPs3g8vLRQXzdzTnKzQYTF8lg-5QQ ...

  6. Dos - 学习总结(1)

    1.控制台复制 1>鼠标右键,标记. 2>选定复制内容后,鼠标右键,完成复制. 2.

  7. Element-ui 使用详细介绍

    一.后台搭建 使用 vue-admin-template 来快速搭建后台管理,它包含了 Element UI & axios & iconfont & permission c ...

  8. 取石子游戏 HDU 1527 博弈论 威佐夫博弈

    取石子游戏 HDU 1527 博弈论 威佐夫博弈 题意 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两 ...

  9. POJ 3549 GSM phone(圆+扫描线+最短路)

    题目意思是求起点s到终点s的最短路,但是只能在圆的内部和边上走.一种可以想到的方法就是求出所有的交点,然后两两连边并验证合法性,但是这样的交点数规模有n2. 我们可以观察发现,我们在圆求并构成的图形中 ...

  10. 通过编写串口助手工具学习MFC过程——(六)添加Edit编辑框控件

    通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...