当前位置:编程学习 > C/C++ >>

[AndEngine学习教程] ParticleSystem 粒子系统

1.本节要点
    本节主要基于粒子系统实现火焰视觉效果的模拟
2.新学习内容
   1.SpriteParticleSystem的介绍,这个类是集成自ParticleSystem<Sprite]>的,从源码可以看出
[java]
public class SpriteParticleSystem extends ParticleSystem<Sprite> { 
    // =========================================================== 
    // Constants 
    // =========================================================== 
 
    // =========================================================== 
    // Fields 
    // =========================================================== 
 
    // =========================================================== 
    // Constructors 
    // =========================================================== 
 
    public SpriteParticleSystem(final IParticleEmitter pParticleEmitter, final float pRateMinimum, final float pRateMaximum, final int pParticlesMaximum, final ITextureRegion pTextureRegion, final VertexBufferObjectManager pVertexBufferObjectManager) { 
        this(0, 0, pParticleEmitter, pRateMinimum, pRateMaximum, pParticlesMaximum, pTextureRegion, pVertexBufferObjectManager); 
    } 
 
    public SpriteParticleSystem(final float pX, final float pY, final IParticleEmitter pParticleEmitter, final float pRateMinimum, final float pRateMaximum, final int pParticlesMaximum, final ITextureRegion pTextureRegion, final VertexBufferObjectManager pVertexBufferObjectManager) { 
        super(pX, pY, new IEntityFactory<Sprite>() { 
            @Override 
            public Sprite create(final float pX, final float pY) { 
                return new Sprite(pX, pY, pTextureRegion, pVertexBufferObjectManager); 
            } 
        }, pParticleEmitter, pRateMinimum, pRateMaximum, pParticlesMaximum); 
    } 
 
    protected SpriteParticleSystem(final float pX, final float pY, final IEntityFactory<Sprite> pEntityFactory, final IParticleEmitter pParticleEmitter, final float pRateMinimum, final float pRateMaximum, final int pParticlesMaximum) { 
        super(pX, pY, pEntityFactory, pParticleEmitter, pRateMinimum, pRateMaximum, pParticlesMaximum); 
    } 
 
    // =========================================================== 
    // Getter & Setter 
    // =========================================================== 
 
    // =========================================================== 
    // Methods for/from SuperClass/Inte易做图ces 
    // =========================================================== 
 
    // =========================================================== 
    // Methods 
    // =========================================================== 
 
    // =========================================================== 
    // Inner and Anonymous Classes 
    // =========================================================== 

2.在SpriteParticleSystem中引出了IParticleEmitter的概念,在AndEngine中,常用的几种粒子发射器有:
  :圆环粒子发射器
  PointParticleEmitter:点状粒子发射器
  RectangleParticleEmitter:矩形例子粒子器
根据名称几可以大概知道发射出来的粒子形状
在本节当中主要使用到CircleParticleEmitter环形粒子源码如下:
   
[java] 
public class CircleParticleEmitter extends BaseCircleParticleEmitter { 
    // =========================================================== 
    // Constants 
    // =========================================================== 
 
    // =========================================================== 
    // Fields 
    // =========================================================== 
 
    // =========================================================== 
    // Constructors 
    // =========================================================== 
 
    public CircleParticleEmitter(final float pCenterX, final float pCenterY, final float pRadius) { 
        super(pCenterX, pCenterY, pRadius); 
    } 
 
    public CircleParticleEmitter(final float pCenterX, final float pCenterY, final float pRadiusX, final float pRadiusY) { 
        super(pCenterX, pCenterY, pRadiusX, pRadiusY); 
    } 
 
    // =========================================================== 
    // Getter & Setter 
    // =========================================================== 
 
    // =========================================================== 
    // Methods for/from SuperClass/Inte易做图ces 
    // =========================================================== 
 
    @Override 
    public void getPositionOffset(final float[] pOffset) { 
        final float random = MathUtils.RANDOM.nextFloat() * MathConstants.PI * 2; 
        pOffset[VERTEX_INDEX_X] = this.mCenterX + FloatMath.cos(random) * this.mRadiusX * MathUtils.RANDOM.nextFloat(); 
        pOffset[VERTEX_INDEX_Y] = this.mCenterY + FloatMath.sin(random) * this.mRadiusY * MathUtils.RANDOM.nextFloat(); 
    } 
 
    // =========================================================== 
    // Methods 
    // =========================================================== 
 
    // =========================================================== 
    // Inner and Anonymous Classes 
    // =========================================================== 

3.内容初始化
    这里要实现的东西很简单,只有一张图片,用作粒子系统用的
  
[java] 
private static final int CAMERA_WIDTH = 800; 
    private static final int CAMERA_HEIGHT = 480; 
     
    private Camera mCamera; 
    private TiledTextureRegion mParticleRegion; 
&nbs

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,