原文链接http://blog.csdn.net/cng1991/article/details/7298955
今天看libgdx时看到了libgdx的粒子特效,效果蛮好的。它的粒子效果有专门的编辑器。
废话不多,就讲下如何实现的吧。
首先到http://code.google.com/p/libgdx/wiki/ParticleEditor下载粒子的编辑器,点击Run JWS即可下载particle-editor.jnlp。
然后打开particle-editor.jnlp,当然这需要java的环境,然后编辑效果,这工具的使用方法自己去摸索吧,很简单的。然后将编辑好的效果保存为particle.p文件。放在android工程中的assets/data目录下。
然后贴上代码:
package com.cng;
import android.os.Bundle;
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.InputProcessor;
import com.badlogic.gdx.backends.android.AndroidApplication;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.g2d.ParticleEffect;
import com.badlogic.gdx.graphics.g2d.ParticleEmitter;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.utils.Array;
public class MyGameActivity extends AndroidApplication {
class MyGameListen implements ApplicationListener
{
SpriteBatch batch;
ParticleEffect effect;
int index;
Array<ParticleEmitter> emitters;
int count;
@Override
public void render () {
batch.getProjectionMatrix().setToOrtho2D(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
batch.begin();
effect.draw(batch, Gdx.graphics.getDeltaTime());
batch.end();
}
@Override
public void create ()
{
batch=new SpriteBatch();
effect=new ParticleEffect();
effect.load(Gdx.files.internal("data/particle.p"), Gdx.files.internal("data/"));
effect.setPosition(Gdx.graphics.getWidth()/2, Gdx.graphics.getHeight()/2);
emitters=new Array<ParticleEmitter>(effect.getEmitters());
effect.getEmitters().clear();
effect.getEmitters().add(emitters.get(index));
InputProcessor inputProcessor=new InputProcessor()
{
@Override
public boolean touchUp(int arg0, int arg1, int arg2, int arg3)
{
return false;
}
@Override
public boolean touchMoved(int arg0, int arg1)
{
return false;
}
@Override
public boolean touchDragged(int arg0, int arg1, int arg2)
{
effect.setPosition(arg0, Gdx.graphics.getHeight()-arg1);
return false;
}
@Override
public boolean touchDown(int arg0, int arg1, int arg2, int arg3)
{
ParticleEmitter emitter=emitters.get(index);
count+=100;
if(count>emitter.getMaxParticleCount())
emitter.setMaxParticleCount(count*2);
count=Math.max(0, count);
emitter.getEmission().setHigh(count/emitter.getLife().getHighMax()*1000);
effect.getEmitters().clear();
effect.getEmitters().add(emitter);
return false;
}
@Override
public boolean scrolled(int arg0)
{
// TODO Auto-generated method stub
return false;
}
@Override
public boolean keyUp(int arg0)
{
// TODO Auto-generated method stub
return false;
}
@Override
public boolean keyTyped(char arg0)
{
// TODO Auto-generated method stub
return false;
}
@Override
public boolean keyDown(int arg0)
{
// TODO Auto-generated method stub
return false;
}
};
Gdx.input.setInputProcessor(inputProcessor);
}
@Override
public void dispose()
{
// TODO Auto-generated method stub
}
@Override
public void pause()
{
// TODO Auto-generated method stub
}
@Override
public void resize(int arg0, int arg1)
{
}
@Override
public void resume()
{
}
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
initialize(new MyGameListen(), false);
}
}
这样即可得到粒子效果。效果如下图: