[AndEngine学习教程] 第8节 ParticleSystem 粒子系统
来源:互联网 发布:江苏网络问政 编辑:程序博客网 时间:2024/05/17 23:44
转自:http://blog.csdn.net/cen616899547/article/details/8148627
1.本节要点
本节主要基于粒子系统实现火焰视觉效果的模拟
2.新学习内容
1.SpriteParticleSystem的介绍,这个类是集成自ParticleSystem<Sprite]>的,从源码可以看出
- public class SpriteParticleSystemextends ParticleSystem<Sprite> {
- // ===========================================================
- // Constants
- // ===========================================================
- // ===========================================================
- // Fields
- // ===========================================================
- // ===========================================================
- // Constructors
- // ===========================================================
- public SpriteParticleSystem(final IParticleEmitter pParticleEmitter,finalfloat pRateMinimum,finalfloat pRateMaximum,finalint pParticlesMaximum,final ITextureRegion pTextureRegion,final VertexBufferObjectManager pVertexBufferObjectManager) {
- this(0,0, pParticleEmitter, pRateMinimum, pRateMaximum, pParticlesMaximum, pTextureRegion, pVertexBufferObjectManager);
- }
- public SpriteParticleSystem(finalfloat pX,finalfloat pY,final IParticleEmitter pParticleEmitter,finalfloat pRateMinimum,finalfloat pRateMaximum,finalint pParticlesMaximum,final ITextureRegion pTextureRegion,final VertexBufferObjectManager pVertexBufferObjectManager) {
- super(pX, pY, new IEntityFactory<Sprite>() {
- @Override
- public Sprite create(finalfloat pX,finalfloat pY) {
- return new Sprite(pX, pY, pTextureRegion, pVertexBufferObjectManager);
- }
- }, pParticleEmitter, pRateMinimum, pRateMaximum, pParticlesMaximum);
- }
- protected SpriteParticleSystem(finalfloat pX,finalfloat pY,final IEntityFactory<Sprite> pEntityFactory,final IParticleEmitter pParticleEmitter,finalfloat pRateMinimum,finalfloat pRateMaximum,finalint 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环形粒子源码如下:
- public class CircleParticleEmitterextends BaseCircleParticleEmitter {
- // ===========================================================
- // Constants
- // ===========================================================
- // ===========================================================
- // Fields
- // ===========================================================
- // ===========================================================
- // Constructors
- // ===========================================================
- public CircleParticleEmitter(finalfloat pCenterX,finalfloat pCenterY,finalfloat pRadius) {
- super(pCenterX, pCenterY, pRadius);
- }
- public CircleParticleEmitter(finalfloat pCenterX,finalfloat pCenterY,finalfloat pRadiusX,finalfloat pRadiusY) {
- super(pCenterX, pCenterY, pRadiusX, pRadiusY);
- }
- // ===========================================================
- // Getter & Setter
- // ===========================================================
- // ===========================================================
- // Methods for/from SuperClass/Interfaces
- // ===========================================================
- @Override
- public void getPositionOffset(finalfloat[] 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.内容初始化
这里要实现的东西很简单,只有一张图片,用作粒子系统用的
- private staticfinalint CAMERA_WIDTH =800;
- private staticfinalint 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.构建场景
- @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);
- SpriteParticleSystem mParticleSystem = new SpriteParticleSystem(CAMERA_WIDTH/2, CAMERA_HEIGHT/2,
- mEmitter, 10, 200, 300, mParticleRegion, getVertexBufferObjectManager());
- mParticleSystem.addParticleInitializer(new ColorParticleInitializer(1,0,0));
- mParticleSystem.addParticleInitializer(new AlphaParticleInitializer(0));
- mParticleSystem.addParticleInitializer(new VelocityParticleInitializer(-2,2, -20, -10));
- mParticleSystem.addParticleInitializer(new RotationParticleInitializer(0.0f,360.0f));
- mParticleSystem.addParticleInitializer(new ExpireParticleInitializer(0,6));
- mParticleSystem.addParticleModifier(new ScaleParticleModifier(0,5,1.0f,2.5f));
- mParticleSystem.addParticleModifier(new ColorParticleModifier(0,3,1,1,0,0.5f,0,0));
- mParticleSystem.addParticleModifier(new ColorParticleModifier(4,6,1,1,0.5f,1,0,1));
- mParticleSystem.addParticleModifier(new AlphaParticleModifier(0,1,0,1));
- mParticleSystem.addParticleModifier(new AlphaParticleModifier(5,6,1,0));
- mScene.attachChild(mParticleSystem);
- pOnCreateSceneCallback.onCreateSceneFinished(mScene);
- }
值得关注的是addParticleInitializer和addParticleModifier这两个函数,配合起来调整粒子集合的形状,颜色旋转,位移等
参数,呈现呈现出来的就是想要的火焰效果了;
http://download.csdn.net/detail/cen616899547/4733452
注意:源代码上有些地方比较旧,有不一致的地方,请以上面例子的代码为准!
最新经过修改的源代码:http://download.csdn.net/detail/cen616899547/4734139
- [AndEngine学习教程] 第8节 ParticleSystem 粒子系统
- [AndEngine学习教程] 第8节 ParticleSystem 粒子系统
- iOS_31_cocos2d_粒子系统ParticleSystem
- ParticleSystem粒子系统
- Unity3D ParticleSystem粒子系统
- [AndEngine学习教程] 第10节 box2D 物理碰撞系统
- [AndEngine学习教程] 第10节 box2D 物理碰撞系统
- Unity3D ParticleSystem粒子系统 【初级】
- 模拟粒子系统(ParticleSystem.Simulate)
- AndEngine粒子系统
- andengine 粒子系统
- Unity3D ParticleSystem粒子系统(3.5版)
- Unity3D ParticleSystem粒子系统(3.5版
- Unity3D ParticleSystem粒子系统属性总结
- Unity3D ParticleSystem粒子系统属性总结
- [AndEngine学习教程] 第1节 搭建开发环境
- [AndEngine学习教程] 第3节 使用Modifier修改动画
- [AndEngine学习教程] 第4节 制作人物动画
- #算法导论笔记#字符串匹配
- [AndEngine学习教程] 第7节 场景精灵间的坐标转换
- 中断控制---Tasklet
- Perl 命令行处理command line common usage and skill
- 隐藏程序框图上的大个 Cluster [编写优美的代码]
- [AndEngine学习教程] 第8节 ParticleSystem 粒子系统
- XML添加节点,添加到指定位置
- [AndEngine学习教程] 第9节 CollisionDetection 实体碰撞检测
- POJ 2826 两线段关系求面积
- 多分辨率支持
- null和"null"的区别
- Linux lsof 命令详解
- PHP书写规范 PHP Coding Standard
- Android 分布式编译