利用libgdx开发Android游戏(三)
2012-12-25 10:02
218 查看
粒子系统
修改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()中实现粒子的绘制和清除工作。
修改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()中实现粒子的绘制和清除工作。
相关文章推荐
- 利用libgdx开发Android游戏(一)
- android游戏开发框架libgdx的使用(二十二)—利用TABLELAYOUT进行布局
- 利用libgdx开发Android游戏(二)
- android游戏开发框架libgdx的使用(九)—在libgdx中使用Box2d
- Android游戏框架libgdx笔记(一):开发环境搭建
- 【Android LibGDX游戏引擎开发教程】第04期:各个模块的详细介绍
- android游戏开发框架libgdx的使用(二十一)—使用TTF字库支持中文
- 【Android LibGDX游戏引擎开发教程】第04期:各个模块的详细介绍
- 【Android LibGDX游戏引擎开发教程】第08期:中文字体的显示和绘制(下)
- android游戏开发框架libgdx的使用(六)--演员和演出
- android游戏开发框架libgdx的使用(十六)—使用TexturePacker工具加快开发速度
- 【Android游戏开发十八】解放手指,利用传感器开发游戏!(本文讲解在SurfaceView中用重力传感器控制圆球的各方向移动)
- android游戏开发框架libgdx的使用(十三)—TiledMap中的角色和角色移动
- android游戏开发框架libgdx的使用(十)—双舞台
- Android开发_libgdx游戏引擎教程 性能优良的游戏引擎—libgdx (五)
- 【Android LibGDX游戏引擎开发教程】第01期:LibGDX的详细介绍
- 【Android LibGDX游戏引擎开发教程】第08期:中文字体的显示和绘制(下)
- android游戏开发框架libgdx的使用(十三)—TiledMap中的角色和角色移动
- android游戏开发框架libgdx的使用(十四)—TiledMap中视角完善和障碍物处理
- android游戏开发框架libgdx的使用(完)—杂谈Libgdx