学校的那些乱七八糟的事太多了,难得挤出时间构建我的坦克。现在给坦克子弹加上爆炸效果。
算法不用自己写,直接利用里面的粒子类就行了,真是太容易了!
public class Test extends SimpleGame {
private static final Logger logger = Logger
.getLogger(Test.class.getName());
private Node explosion;
private ParticleMesh pMesh;
/**
* Entry point for the test,
* @param args
*/
public static void main(String[] args) {
Test app = new Test();
app.setDialogBehaviour(ALWAYS_SHOW_PROPS_DIALOG);
app.start();
}
@Override
protected void simpleInitGame() {
// TODO Auto-generated method stub
pMesh=ParticleFactory.buildParticles("pMesh", 200); //新建一个粒子系统,一次喷200个粒子。
explosion=new Node("explosion"); //爆炸节点
pMesh.setInitialVelocity(0.3f); //初始喷射速度
pMesh.setEmissionDirection(new Vector3f(0,-1,0)); //喷射方向
pMesh.setMinimumAngle(180*FastMath.DEG_TO_RAD); //设置喷射范围角度,这里很关键。
//把喷射范围设成一个圆周就是爆炸效果了
//就是这里有点不能理解的是 180度就够了。
//而且还有min 和max两个方法
//下面的lifetime也一样有两个方法
pMesh.setMaximumLifeTime(100f);
pMesh.setSpeed(2f); //喷射速度
pMesh.setStartSize(25f); //起始大小
pMesh.setEndSize(5f); //生命结束时的大小,在这之间应该是均匀变化的
//给粒子加上纹理图,每个粒子的形状就跟这幅图一样了
TextureState ts1=display.getRenderer().createTextureState();
Texture tx=TextureManager.loadTexture(Test.class.getClassLoader().getResource("jmetest/data/texture/flaresmall.jpg"));
ts1.setTexture(tx);
pMesh.setRenderState(ts1);
pMesh.setLocalScale(0.03f);
explosion.attachChild(pMesh);
rootNode.attachChild(explosion);
}
这是效果图: