利用libgdx开发Android游戏(三)

粒子系统

修改FirstGame类,修改完成之后代码如下:

package com.game.basic;

import java.util.ArrayList;

import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.ParticleEffect;
import com.badlogic.gdx.graphics.g2d.ParticleEffectPool;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class FirstGame implements ApplicationListener {

private SpriteBatch batch;
private BitmapFont bf;
// private Texture texture;
// private Sprite sprite;
// 粒子系统
ParticleEffect particle; // 粒子实例
ParticleEffect temp; // 临时变量
ParticleEffectPool particlepool; // 粒子管理类实例
ArrayList<ParticleEffect> particlelist;

@Override
public void create() {
// TODO Auto-generated method stub
batch = new SpriteBatch();
bf = new BitmapFont(Gdx.files.internal("cf.fnt"),Gdx.files.internal("cf.png"),false);
// texture = new Texture(Gdx.files.internal("image.jpg"));
// sprite = new Sprite(texture,300,600,512,512);
// sprite.setRotation(15);
// 初始化粒子变量
particle = new ParticleEffect();
particle.load(Gdx.files.internal("par.p"), Gdx.files.internal(""));
particlepool = new ParticleEffectPool(particle,5,10);
particlelist = new ArrayList<ParticleEffect>();
}

@Override
public void dispose() {
// TODO Auto-generated method stub
batch.dispose();
bf.dispose();
// texture.dispose();
particle.dispose();
if(temp!=null)
temp.dispose();
particlepool.clear();
}

@Override
public void pause() {
// TODO Auto-generated method stub

}

@Override
public void render() {
// TODO Auto-generated method stub
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); // 清屏
Gdx.gl.glClearColor(0f, 0f, 0f, 0f);
batch.begin();
// sprite.draw(batch);
// batch.draw(texture, 100,200);
bf.draw(batch, "Read the fucking code!", Gdx.graphics.getWidth()/2-200, Gdx.graphics.getHeight()/2);
bf.setColor(Color.RED);
batch.end();

if(true){
if(Gdx.input.isTouched()){
temp = particlepool.obtain();
temp.setPosition(Gdx.input.getX(), Gdx.graphics.getHeight()-Gdx.input.getY());
particlelist.add(temp);
}
batch.begin();
for(int i=0;i<particlelist.size();i++){
particlelist.get(i).draw(batch,Gdx.graphics.getDeltaTime());
}
batch.end();

ParticleEffect tempparticle;
for(int i=0;i< particlelist.size();i++){
tempparticle = particlelist.get(i);
if(tempparticle.isComplete()){
particlelist.remove(i);
}
}
}
}

@Override
public void resize(int arg0, int arg1) {
// TODO Auto-generated method stub

}

@Override
public void resume() {
// TODO Auto-generated method stub

}

}

触摸屏幕后,效果如下:

代码分析:

首先我们需要下载Particle Editor,下载地址为:http://libgdx.googlecode.com/svn/jws/particle-editor.jnlp,运行截图:

在这个“所见即所得”的编辑器中设置粒子的各个参数,设置完成之后点击左下角的保存按钮,命名为particle.p,同时自己设计一张命名为particle.png的图片,图片的名字必须是particle.png,不可更改。然后将这两个文件拷贝到工程的assets目录下。

在FirstGame类中,首先自定义四个变量:particle——粒子实例;temp——临时粒子实例;particlepool——粒子管理类,当生成大量的粒子实例时应当使用该类,可以避免自己处理的麻烦;particlelist——存储临时粒子实例的链表。

在create()中实现各个变量的初始化,在dispose()中手动释放资源,在render()中实现粒子的绘制和清除工作。

 

posted on 2012-12-25 10:02  金蛇郎君的世界  阅读(377)  评论(0编辑  收藏  举报

导航