现在的位置: 首页 > 综合 > 正文

AndEngine粒子系统

2013年09月05日 ⁄ 综合 ⁄ 共 2613字 ⁄ 字号 评论关闭

只能算是简单的研究了一下,使用了例子里面的图片,当点击屏幕时粒子效果消失。

public class MainActivity extends SimpleBaseGameActivity {

	private static final int CAMERA_WIDTH = 480;
	private static final int CAMERA_HEIGHT = 720;

	private BitmapTextureAtlas mBitmapTextureAtlas;
	private ITextureRegion mParticleTextureRegion;

	public EngineOptions onCreateEngineOptions() {
		final Camera camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
		return new EngineOptions(true, ScreenOrientation.PORTRAIT_FIXED, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), camera);
	}

	@Override
	protected void onCreateResources() {
		BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
		mBitmapTextureAtlas = new BitmapTextureAtlas(getTextureManager(), 32, 32, TextureOptions.BILINEAR);
		mParticleTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(mBitmapTextureAtlas, this, "particle_point.png", 0, 0);
		mBitmapTextureAtlas.load();
	}

	@Override
	protected Scene onCreateScene() {
		final Scene scene = new Scene();
		scene.setBackground(new Background(0.09804f, 0.6274f, 0.8784f));

		CircleParticleEmitter emitter = new CircleParticleEmitter(CAMERA_WIDTH / 2, CAMERA_WIDTH / 2, 30);// 圆形粒子生成器,位置在屏幕中央,半径30
		final SpriteParticleSystem particleSystem = new SpriteParticleSystem(emitter, 10, 60, 30, mParticleTextureRegion, getVertexBufferObjectManager());// 使用图片作为粒子

		particleSystem.addParticleInitializer(new ColorParticleInitializer<Sprite>(1, 0, 0));// 初始化为红色
		particleSystem.addParticleInitializer(new AlphaParticleInitializer<Sprite>(0));// 初始化为全透明
		particleSystem.addParticleInitializer(new BlendFunctionParticleInitializer<Sprite>(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE));
		particleSystem.addParticleInitializer(new VelocityParticleInitializer<Sprite>(-5, 5, 20, 10));// 前两个值为横向加速度的取值范围,后面两个值为纵向加速度取值范围
		particleSystem.addParticleInitializer(new RotationParticleInitializer<Sprite>(0.0f, 360.0f));// 旋转角度取值范围
		particleSystem.addParticleInitializer(new ExpireParticleInitializer<Sprite>(6));// 单个粒子持续时间

		particleSystem.addParticleModifier(new ScaleParticleModifier<Sprite>(0, 5, 1.0f, 2.0f));// 粒子产生过程0-5秒从原始大小变为2倍大小
		particleSystem.addParticleModifier(new ColorParticleModifier<Sprite>(0, 3, 1, 1, 0, 0.5f, 0, 0));// 0-3秒间的颜色变化
		particleSystem.addParticleModifier(new ColorParticleModifier<Sprite>(4, 6, 1, 1, 0.5f, 1, 0, 1));// 4-6秒间的颜色变化
		particleSystem.addParticleModifier(new AlphaParticleModifier<Sprite>(0, 1, 0, 1));// 0-1秒间透明度变化
		particleSystem.addParticleModifier(new AlphaParticleModifier<Sprite>(5, 6, 1, 0));// 5-6秒间透明度变化

		scene.attachChild(particleSystem);
                // 屏幕触摸事件
		scene.setOnSceneTouchListener(new IOnSceneTouchListener() {
			public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
				if (pSceneTouchEvent.isActionUp()) {
					particleSystem.setParticlesSpawnEnabled(false);
				}
				return false;
			}
		});

		return scene;
	}

}

如有不对之处,欢迎大家拍砖

抱歉!评论已关闭.