设为首页 加入收藏

TOP

ParticleSystem 粒子系统(一)
2013-01-01 14:48:49 来源: 作者: 【 】 浏览:778
Tags: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/Interfaces

  // ===========================================================

  // ===========================================================

  // 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/Interfaces

  // ===========================================================

  @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;

  @Override

  public EngineOptions onCreateEngineOptions() {

  // TODO Auto-generated method stub

  mCamera = new Camera(0,0,CAMERA_WIDTH, CAMERA_HEIGHT);

  EngineOptions mEngineOptions = new EngineOptions(true, ScreenOrientation.LANDSCAPE_SENSOR, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), mCamera);

  return mEngineOptions;

  }

  @Override

  public void onCreateResources(

  OnCreateResourcesCallback pOnCreateResourcesCallback)

  throws Exception {

  // TODO Auto-generated method stub

  BitmapTextureAtlas mTexture = new BitmapTextureAtlas(getTextureManager(), 32, 32, TextureOptions.BILINEAR_PREMULTIPLYALPHA);

  mParticleRegion = BitmapTextureAtlasTextureRegionFactory.createTiledFromAsset(mTexture, this, "particle_point.png", 0, 0,1,1);

  mTexture.load();

  pOnCreateResourcesCallback.onCreateResourcesFinished();

  }

  4.构建场景

  [java]

  @Override

  public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback)

  throws Exception {

  // TODO Auto-generated method stub

  Scene mScene = new Scene();

  CircleOutlineParticleEmitter mEmitter = new CircleOutlineParticleEmitter(CAMERA_WIDTH/2,CAMERA_HEIGHT/2,80);

   

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇混合图 (h[u]误写成h[q[u]].. 下一篇c++简单线程封装

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: