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脚本一样,不过这个将会对应所有用到的实例;
<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粒子爆发模式的更多相关文章
- 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇:简介及目录》(附上完整工程文件)
G-3D引擎2D射击类游戏制作教程 游戏类型: 打飞机游戏属于射击类游戏中的一种,可以划分为卷轴射击类游戏. 视觉表现类型为:2D 框架简介: Genesis-3D引擎不仅为开发者提供一个3D游戏制作 ...
- 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇01:播放序列动画》
1.播放序列动画 系列动画播放概述 2D游戏中的动画系统,不同于3D游戏.3D游戏中,角色美术资源不仅包含角色模型的,还包括角色的贴图和动作等,模型本身自带角色的动作动画效果.2D游戏中,角色美术资源 ...
- 【转载】从零实现3D图像引擎:(2)画2D直线不简单
原文:从零实现3D图像引擎:(2)画2D直线不简单 1. 数学分析 1) 画直线的问题 本来我以为画直线会很容易,随便拿个直线公式,遍历X求Y画出来不就完了么,但事实并非如此.以2D直线为例,因为3D ...
- Laya一个莫名其妙的报错laya.pathfinding
版本2.2.0 莫名其妙,然后论坛查了下 把类库设置,不勾选这玩意就不报错了.
- 【learning】vim爆改记 (如何让vim用起来像devc++)
由于本蒟蒻NOIP人品大爆发,能去冬令营,故准备开始练习使用linux下的IDE:vim 在dalao DTZ的帮助下,我装好了vim,并做了最初的配置. 然而........好难用啊,怎么和devc ...
- 查看MySQL是否支持InnoDB引擎以及不支持的解决办法
通过命令行进入mysql SHOW variables like "have_%"; 显示结果中会有如下3种可能的结果: have_innodb YES have_innodb N ...
- 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇08:弹幕系统》本系列完结
8.弹幕系统 弹幕系统概述: 弹幕系统的设计体现了射击游戏的基本要素,玩家要在敌人放出的大量子弹(弹幕)的细小空隙间闪避,能在玩家闪躲弹幕的时候给玩家带来快感,接近满屏的子弹,增加了对玩家的视觉冲击力 ...
- 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇07:全屏炸弹》
7.全屏炸弹 全屏炸弹概述: 为了增设游戏的趣味性,我们制作一个游戏的基本框架以外.还会增设一些其他的额外的功能.比如5秒无敌状态.冰冻效果等.下面咱们以消灭屏幕中所有炸弹为例,看除了碰撞可以触发事件 ...
- 《Genesis-3D开源游戏引擎完整实例教程-2D射击游戏篇06:计分》
6.计分 计分概述: 分值计量直接反应玩家在游戏中获得的成就感.因此,计分系统在游戏中显得尤为重要,有的反应在直接获取的分数上,有的反应在杀敌数量上等. 计分原理: 原理图,如图6-1所示. 图6-1 ...
随机推荐
- Python基础语法之常量与变量
一.变量的命名规则 只能以下划线,数字和字母组成,不可以是特殊字符: 不可以以数字开头: 关键字不可作为变量名: 变量名区分大小写: 要具有描述性: 二.常量 python中并没有关键字const,在 ...
- 【Python】利用豆瓣短评数据生成词云
在之前的文章中,我们获得了豆瓣爬取的短评内容,汇总到了一个文件中,但是,没有被利用起来的数据是没有意义的. 前文提到,有一篇微信推文的关于词云制作的一个实践记录,准备照此试验一下. 思路分析 读文件 ...
- 基于html5二个div 连线
因为要实现拖拽连线研究了一下基于extjs 和html5的不同实现方法 extjs底层的画图引擎是svg 不知道在html5大潮即将袭来的前夕一贯走在技术前沿的extjs开发团队没有自己封装基于htm ...
- ESXi导出的CentOS7 ovf文件导入到workstation 无法打开GUI登录界面的问题解决方案
1. 前几天将centos的机器导出为ovf 文件 然后使用 workstation 引入之后发现总是黑屏 然后有一个 横杠在闪 2. 解决办法是 修改centos的虚拟机配置文件,将显示器修改为这样 ...
- PL/SQL基本操作
1.常规过程化形式 declare o_booking_flag ); begin -- Call the procedure destine_ticket(', , 'E', , o_booking ...
- MySQL-快速入门(5)数据查询-常用关键字、分组查询、聚合函数
1.in关键字.in的效率高于or. in (value1,value2,...) 或者not in (value1,value2,...) 2.between ... and ... between ...
- vue组件命名和传值
一.vue组件命名: 组件有好几种命名方式, 可以使用 component-vue (短横线分隔命名).componentVue (驼峰式命名) 或ComponentVue (单词首字母) 因为h ...
- MyBatis二级缓存的笔记及记录
一.什么是二级缓存: 由于一级缓存是一次性的.临时的:每个会话都会创建一个新的:多个会话之间是不能共享的: 二级缓存用于解决一级缓存的不足:每一个“namespace”都会对应一个二级缓存:执行查询的 ...
- uboot常用命令
一. 常用简单命令 1.1. help命令 a. 帮助查看其他命令的使用方法,类型linux下man b. 示例: help help x210 # help help help [command . ...
- CF682C Alyona and the Tree
题意翻译 题目描述 给你一棵树,边与节点都有权值,根节点为1,现不停删除叶子节点形成新树,问最少删掉几个点,能使得最后剩下的树内,∀v与其子树内∀u间边权的和小于点u权值 输入输出格式 输入格式: 第 ...