JME基础教程代码分析12 效果控制

package com.hello;

import com.jme3.app.SimpleApplication;

import com.jme3.effect.ParticleEmitter;

import com.jme3.effect.ParticleMesh;

import com.jme3.material.Material;

import com.jme3.math.ColorRGBA;

import com.jme3.math.Vector3f;

 

/** Sample 11 - how to create fire, water, and explosion effects. */

public class HelloEffects extends SimpleApplication {

 

  public static void main(String[] args) {

    HelloEffects app = new HelloEffects();

    app.start();

  }

 

  @Override

  public void simpleInitApp() {

 

    ParticleEmitter fire = new ParticleEmitter("Emitter", ParticleMesh.Type.Triangle, 30);

    Material mat_red = new Material(assetManager, "Common/MatDefs/Misc/Particle.j3md");

    mat_red.setTexture("Texture", assetManager.loadTexture("Effects/Explosion/flame.png"));

    fire.setMaterial(mat_red);

    //上边的都学过了

    //2x2的粒子发射器

    fire.setImagesX(2); fire.setImagesY(2); // 2x2 texture animation

    fire.setEndColor(  new ColorRGBA(1f, 0f, 0f, 1f));   // red

    fire.setStartColor(new ColorRGBA(1f, 1f, 0f, 0.5f)); // yellow

    //简单的理解就是初始化每个粒子的方向和速度

    fire.setInitialVelocity(new Vector3f(0, 2, 0));

    fire.setStartSize(1.5f);

    fire.setEndSize(0.1f);

    //设置重力,但单位比较奇怪,我的理解类似于加速度单位

    fire.setGravity(0);

    //设置粒子生命周期最高最低数

    fire.setLowLife(0.5f);

    fire.setHighLife(3f);

    //粒子加速度范围,取值应该是0-1,现在0.3f

    fire.setVelocityVariation(0.3f);

    rootNode.attachChild(fire);

 

    ParticleEmitter debris = new ParticleEmitter("Debris", ParticleMesh.Type.Triangle, 10);

    Material debris_mat = new Material(assetManager, "Common/MatDefs/Misc/Particle.j3md");

    debris_mat.setTexture("Texture", assetManager.loadTexture("Effects/Explosion/Debris.png"));

    debris.setMaterial(debris_mat);

    debris.setImagesX(3); debris.setImagesY(3); // 3x3 texture animation

    //每个粒子旋转速度

    debris.setRotateSpeed(4);

    //粒子中随机选择的图片

    debris.setSelectRandomImage(true);

    debris.setInitialVelocity(new Vector3f(0, 4, 0));

    debris.setStartColor(new ColorRGBA(1f, 1f, 1f, 1f));

    debris.setGravity(6f);

    debris.setVelocityVariation(.60f);

    rootNode.attachChild(debris);

    //立即发射所有粒子

    debris.emitAllParticles();

 

  }

}

posted on 2011-08-12 11:32  苏桓(osbert)  阅读(273)  评论(0编辑  收藏  举报

导航