每一款强大的游戏引擎一般都会自带粒子编辑器,libgdx自然也是一样------Particle-Editor,今天我们就将介绍一下它的使用和应用。

(注:该工具必须运行在jre上,所以确保你的电脑上装有Java环境喽)

1.编辑器介绍:

简单来说,所谓的粒子,是由一些做指定规则移动的图片所构造成的。这些图像通常经过不同的展示方式,混合一些特殊的效果,然后再呈现在我们面前,就构成了粒子。粒子系统可以做出各种精妙的效果,如水流,火焰,烟雾等等,制作精美的粒子系统甚至可以以假乱,制作出令人惊叹的效果。

2.编辑器使用

2.1首先,我们先看一张截面图,左上角为效果图,右边为属性设置

2.2接着我们看一下官方的参数介绍:

Delay:  当粒子系统开始后,发射器等待多少时间开始发射

Duration:发射器生存跨度,也就是粒子效果持续的的时间,注意这个时间和粒子生存时间不同

Count:  顾名思义,同一时间可出现的粒子个数,有一个上限一下下限。

Emission:每秒钟发射多少个粒子,这个参数带了一张图表,图表中间写着duration,代表图表X 轴表示发射器生存时间,意思是说发射器的生存时间内,该图表控制各个时间点粒子每秒钟发射多少个,左边的上下两个文本框用于控制生成初始值时的范围,左边的'>'字符用于输入另外一个数值,比如说下面那个”>“, 发射器会在这两个值中间选择一下随机值作为上限值,Relative,如果选中,表示图表中的值是相对值,相对于初始值。否则是个绝对值.

Life:一个粒子的生存时间,

Life Offset:决定粒子在显示之前已经用掉它生命多少值 ,这样可以实现让一个粒子在它生命50%时再显现

X Offset and Y Offset:粒子出现在位置相对中心位置的像素偏移

Spawn: 用于产生粒子的发射器的形状

Spawn Width and Spawn Height: 发射器的形状的宽,高

Size:粒子的大小

Velocity:

Angle:

Rotation:

这个几值用于控制粒子的运动轨迹:

Wind and Gravity:烟为生存时间内在X轴和Y轴上每秒种的像素偏移值

Tint:粒子的颜色,可以在粒子生存期内变化任意多个颜色

Transparency:粒子的透明度

2.3这里我们可以先不考虑怎样制作一个漂亮的效果图,大家可以先做一个工作,就是先save一下,将得到的一个文件,我们将它保存为particle.p,这个可以留下来等会用,这里还需要一个用来形成单个粒子的图片,默认是一个小圆图片,当然你也可以换成其他的具有良好效果的图片。

3.代码实现(实现粒子模拟出触摸轨迹的一个功能)

这里介绍两个主要类:

ParticleEffect 类

介绍:libgdx自带的粒子效果类,负责获取粒子编辑器生成的“.p”文件,主要是负责加入粒子编辑器生成的文件,同时加入一些简单的管理。如果我们要看到粒子效果的话,可以再render中绘制出来。

主要方法解释

voideffectFile,p_w_picpathsDir)负责加载粒子编辑器文件,同时加入Atlas文件。

void(float x, float y)设置粒子位置

负责超看粒子一个生命周期是否完成,一般用去销毁粒子

获取发射器,本身类型是一个 Array 类型。

void draw()绘制粒子效果的方法。

ParticleEffectPool 类

介绍:粒子池,是一个承装粒子的容器,主要负责管理粒子编辑器生成的文件。

主要方法解释

(ParticleEffecteffect, int initialCapacity, int max)第一个参数是一个ParticleEffect实例,第二个参数是初始粒子容量,第三个是最大粒子容量。

obtain()返回一个粒子池中的对象

newObject加入一个粒子对象

主入口:

package com.zhf.android_libgdx;

import com.badlogic.gdx.backends.android.AndroidApplication;

import android.os.Bundle;

public class MainActivity extends AndroidApplication {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//在此启动游戏,FirstGame实现了ApplicationListener的类

initialize(new FirstGame(), false); //specifying the configuration for the GLSurfaceView.

//第二个参数如果设为true,则在opengl 2.0可用的情况下会使用opengl 2.0。

}

}

主界面:

package com.zhf.android_libgdx;

import java.util.ArrayList;

import javax.microedition.khronos.opengles.GL10;

import com.badlogic.gdx.ApplicationListener;

import com.badlogic.gdx.Gdx;

import com.badlogic.gdx.graphics.g2d.ParticleEffect;

import com.badlogic.gdx.graphics.g2d.ParticleEffectPool;

import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class FirstGame implements ApplicationListener {

SpriteBatch batch; // 绘图用的SpriteBatch

ParticleEffect particle; //粒子实例

ParticleEffect tem; //临时变量

ParticleEffectPool particlepool; //一个粒子系统的统一管理的类,负责管理粒子系统的产生回收,可以用它的obtain()方法得到一个ParticleEffect实例

ArrayList particlelist;

public void create () {

// 实例化

batch=new SpriteBatch();

//初始化粒子变量

particle = new ParticleEffect();

//Gdx.files.internal()的位置是在项目的asset根目录下,同理在asset下的data文件夹的话,格式应该为Gdx.files.internal(“data/particle.p”).

//第一个参数是Particle Editor生成的编辑文件(注意后缀名也是自己取的,读取的时候记得对应),第二个参数是形成单个粒子的图片文件。

particle.load(Gdx.files.internal("particle.p"), Gdx.files.internal("")); //还可以换成particle_fire.p

particlepool=new ParticleEffectPool(particle, 5, 10);

particlelist=new ArrayList(); //实例化装粒子效应的集合

}

public void render () {

// STUB

Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); // 清屏

Gdx.gl.glClearColor(0f,0f,0f,0f);

//对此Gdx包中的input部分提供了Gdx.input.isTouched()方法,判断当前屏幕是否被触摸,是则返回true。

if(true){

if(Gdx.input.isTouched()){

//当此触摸点与上一触摸点距离大于一定值的时候触发新的粒子系统,由此减小系统负担

tem=particlepool.obtain();

tem.setPosition(Gdx.input.getX(),Gdx.graphics.getHeight()-Gdx.input.getY());

particlelist.add(tem);

}

batch.begin();

for(int i=0;i

particlelist.get(i).draw(batch, Gdx.graphics.getDeltaTime());

}

batch.end();

//清除已经播放完成的粒子系统

ParticleEffect temparticle;

for(int i=0;i

temparticle=particlelist.get(i);

if(temparticle.isComplete()){

particlelist.remove(i);

}

}

}

}

public void resize (int width, int height) {

// STUB

}

public void pause () {

// STUB

}

public void resume () {

// STUB

}

public void dispose () {

// STUB

batch.dispose();

//千万别忘了释放内存

particle.dispose();

if(tem!=null)

tem.dispose();

particlepool.clear();

}

}

这里注意:particle.load(Gdx.files.internal("particle.p"), Gdx.files.internal(""));

第一个参数是ParticleEditor生成的编辑文件,图片文件的文件名必须为particle.png,也就是说无论粒子编辑文件的名字是什么,系统读取的图片文件都应该是particle.png。

效果图:

   

ok! 效果出来喽!

android 粒子编辑器,libgdx游戏引擎开发笔记(五)粒子编辑器的使用相关推荐

  1. libgdx游戏引擎开发笔记(一)引擎介绍和Helloworld

       做Android快一年了,项目也做了四五个,感觉没什么动力向前,思绪整理了一段时间,决定转入Android游戏开发,同时发现了一款强大的游戏引擎libgdx,在此边学边整理,好记性不如烂笔头嘛! ...

  2. libgdx游戏引擎开发笔记(十三)SuperJumper游戏例子的讲解(篇七)----各个物体的创建及其碰撞检测...

       接着上一篇,我们完成后续的扫尾工作:游戏中个物体创建及其碰撞检测,分数保存,音效处理. 1.World类:(加入所有物体,及其碰撞检测,代码里有详细注解) package com.zhf.myl ...

  3. libgdx游戏引擎开发笔记(十)SuperJumper游戏例子的讲解(篇四)---- 主游戏界面内部框架编写...

    上一讲,我们已经实现了点击play进入游戏界面但仅仅是个黑屏  今天,我们就试着编写代码让它出现游戏的一些简单场景.还是在上一讲的代码基础上,我们创建两个类:World 和 WorldRenderer ...

  4. 简单游戏引擎开发笔记(一)

    ---恢复内容开始--- 一.游戏引擎简介 1.概念 游戏引擎是指一些已编写好的可编辑电脑游戏系统或者一些互交式实时图像应用程序的核心组件.这些系统为游戏设计者提供各种编写游戏所需的各种工具,其目的在 ...

  5. 【Android LibGDX游戏引擎开发教程】第06期:图形图像的绘制(下)图片整合工具的使用...

    在上一篇文章中,我们提到了图片必须是2的n次方的问题.但是随着Libgdx的不断完善和发展,使用一些工具就 可以很好的解决了这样一个问题,但是它的功能又不仅仅只限于此,那么下面就来让我们看看Textu ...

  6. 【Android LibGDX游戏引擎开发教程】第07期:中文字体的显示和绘制(上)

    在字体的显示和绘制中,Libgdx的作者(Mario Zechner,美国人)给我们提供了一个非常好用的工具 --Hiero,那么下面就来看看它具体的使用方法. 一.Hiero工具的使用 1.Hier ...

  7. 【Cocos2d-x游戏引擎开发笔记(13)】Tiled Map Editor(一)

    原创文章,转载请注明出处:http://blog.csdn.net/zhy_cheng/article/details/8308609 Tiled Map Editor是Cocos2d-x支持的地图编 ...

  8. LibGDX游戏引擎-10-游戏地图(TiledMap)

    转载自:http://www.qiushurong.cn/2014/03/23/tiledmap/ 要做游戏地图,在libgdx中我们使用到的工具是TiledMap Editor,官方网址是:链接 T ...

  9. Python游戏引擎开发(六):动画的小小研究

    今天我们来研究动画,其实这个动画就是一个Sprite+Bitmap的结合体.不造什么是Sprite和Bitmap?=__=#看来你是半路杀进来的,快去看看前几章吧: Python游戏引擎开发(一):序 ...

  10. 游戏引擎开发和物理引擎_视频游戏开发的最佳游戏引擎

    游戏引擎开发和物理引擎 In this article, we'll look at some of the most popular game engines for video game deve ...

最新文章

  1. pic单片机ccp脉冲捕捉c语言程序,pic单片机CCP脉冲(PWM)输出
  2. js 月份加6个月_12月AHA HS大众急救认证培训22个城市报名开启!2021年1~6月份课程预售限时开启!!...
  3. 杭电oj1257最少拦截系统—贪心/dp最大递增子序列
  4. Jquery插件(一) webupload上传插件
  5. junit基础学习之-断言注解(3)
  6. Spring MVC原理及配置详解
  7. C++中的“error:LNK2005 已经在*.obj中定义”异常
  8. 深度学习(batch,mini-batch,其它算法)
  9. java中一个分而治之的框架ForkJoin
  10. oracle的优化适用于mysql吗_性能优化之数据库优化,适用于Sqlite、Mysql、Oracle、Sql server,详细介绍了索引和事务及部分针对Sqlite的优化...
  11. 1203.1——条件语句 之 if语句
  12. C#基础List与ArrayList
  13. C语言-数组练习题(附答案)
  14. java连接Oracle乱码_如何解决Java连接数据库oracle中文乱码问题
  15. Endnote导入中文文献格式
  16. Gephi 网络可视化——调整网络布局
  17. 制作和删除软RAID
  18. oracle00312,ORA-00322 ORA-00312 恢复
  19. 微信小程序前端备忘录记事本搜索功能
  20. 敬告青年---陈独秀

热门文章

  1. c语言 分开整数各个数位
  2. 电脑功耗监测_VOCS在线监测系统
  3. C/C++[codeup 1931]打印日期,一年的第n天是几月几号
  4. 蒙特卡洛估值几种不同的计算方式(Python)
  5. kaggle 预测房价竞赛总结 动手学深度学习v2 pytorch
  6. 阿里云云计算 23 VPC的基础架构
  7. AWS知识图谱大赛 -- 负面新闻影响股票基金预测系统架构设计文档
  8. 地图画指定区域_善用GIS 妙绘“环卫”一图画卷
  9. 420.强密码检测器
  10. 大疆机器学习算法岗笔试