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();

 

  }

}

相关文章:

  • 2021-09-13
  • 2021-07-18
  • 2022-02-01
  • 2021-11-23
  • 2021-08-13
  • 2022-02-03
  • 2022-12-23
  • 2021-11-06
猜你喜欢
  • 2021-08-18
  • 2021-12-17
  • 2021-05-26
  • 2021-10-02
  • 2021-06-20
  • 2021-12-23
  • 2021-12-30
相关资源
相似解决方案