zoukankan      html  css  js  c++  java
  • andengine游戏引擎总结进阶篇1

    本篇包括虚拟键盘,粒子系统

       1虚拟键盘

          分为两种,一种是单个虚拟键盘,另一种是多个方位虚拟键盘

          1)加载虚拟键盘所需要的图片资源

    	private BitmapTextureAtlas mOnScreenControlTexture;
    	private ITextureRegion mOnScreenControlBaseTextureRegion;
    	private ITextureRegion mOnScreenControlKnobTextureRegion;
     this.mOnScreenControlTexture = new BitmapTextureAtlas(this.getTextureManager(), 256, 128, TextureOptions.BILINEAR);
      this.mOnScreenControlBaseTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mOnScreenControlTexture, this, "onscreen_control_base.png", 0, 0);
      this.mOnScreenControlKnobTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mOnScreenControlTexture, this, "onscreen_control_knob.png", 128, 0);
      this.mOnScreenControlTexture.load();

           2.1)单个虚拟键盘

       
    final AnalogOnScreenControl analogOnScreenControl = new AnalogOnScreenControl(0, CAMERA_HEIGHT - this.mOnScreenControlBaseTextureRegion.getHeight(), this.mCamera, this.mOnScreenControlBaseTextureRegion, this.mOnScreenControlKnobTextureRegion, 0.1f, 200, this.getVertexBufferObjectManager(), new IAnalogOnScreenControlListener() {
    			@Override
    			public void onControlChange(final BaseOnScreenControl pBaseOnScreenControl, final float pValueX, final float pValueY) {
    				
    //pValueX	,pVlueY在[-1,1]之间,坐标系pValueX ,pVlueY交集就是方位啦		}
    
    			@Override
    			public void onControlClick(final AnalogOnScreenControl pAnalogOnScreenControl) {
    				//里边的小的被点击时调用			}
    		});
    		analogOnScreenControl.getControlBase().setBlendFunction(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
    		analogOnScreenControl.getControlBase().setAlpha(0.5f);
    		analogOnScreenControl.getControlBase().setScaleCenter(0, 128);
    		analogOnScreenControl.getControlBase().setScale(1.25f);
    		analogOnScreenControl.getControlKnob().setScale(1.25f);
    		analogOnScreenControl.refreshControlKnobPosition();
    
    		scene.setChildScene(analogOnScreenControl);

           2.2多个虚拟键盘,下边的是两个

    final AnalogOnScreenControl velocityOnScreenControl = new AnalogOnScreenControl(x1, y1, this.mCamera, this.mOnScreenControlBaseTextureRegion, this.mOnScreenControlKnobTextureRegion, 0.1f, this.getVertexBufferObjectManager(), new IAnalogOnScreenControlListener() {
    			@Override
    			public void onControlChange(final BaseOnScreenControl pBaseOnScreenControl, final float pValueX, final float pValueY) {
    				physicsHandler.setVelocity(pValueX * 100, pValueY * 100);
    			}
    
    			@Override
    			public void onControlClick(final AnalogOnScreenControl pAnalogOnScreenControl) {
    				/* Nothing. */
    			}
    		});
    		velocityOnScreenControl.getControlBase().setBlendFunction(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
    		velocityOnScreenControl.getControlBase().setAlpha(0.5f);
    
    		scene.setChildScene(velocityOnScreenControl);
    
    
    		/* Rotation control (right). */
    		final float y2 = (this.mPlaceOnScreenControlsAtDifferentVerticalLocations) ? 0 : y1;
    		final float x2 = CAMERA_WIDTH - this.mOnScreenControlBaseTextureRegion.getWidth();
    		final AnalogOnScreenControl rotationOnScreenControl = new AnalogOnScreenControl(x2, y2, this.mCamera, this.mOnScreenControlBaseTextureRegion, this.mOnScreenControlKnobTextureRegion, 0.1f, this.getVertexBufferObjectManager(), new IAnalogOnScreenControlListener() {//0.1f触摸响应时间为0.1秒		@Override
    			public void onControlChange(final BaseOnScreenControl pBaseOnScreenControl, final float pValueX, final float pValueY) {
    				if(pValueX == x1 && pValueY == x1) {
    					face.setRotation(x1);
    				} else {
    					face.setRotation(MathUtils.radToDeg((float)Math.atan2(pValueX, -pValueY)));
    				}
    			}
    
    			@Override
    			public void onControlClick(final AnalogOnScreenControl pAnalogOnScreenControl) {
    				/* Nothing. */
    			}
    		});
    		rotationOnScreenControl.getControlBase().setBlendFunction(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
    		rotationOnScreenControl.getControlBase().setAlpha(0.5f);
    
    		velocityOnScreenControl.setChildScene(rotationOnScreenControl);//两个键盘的关系

              2粒子系统

                          1)粒子图片资源

    	this.mBitmapTextureAtlas = new BitmapTextureAtlas(this.getTextureManager(), 32, 32, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
    		this.mParticleTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlas, this, "particle_point.png", 0, 0);
    
    		this.mBitmapTextureAtlas.load();


                         2)粒子类型

    	final CircleOutlineParticleEmitter particleEmitter = new CircleOutlineParticleEmitter(ParticleSystemSimpleExample.CAMERA_WIDTH * 0.5f, ParticleSystemSimpleExample.CAMERA_HEIGHT * 0.5f + 20, 80);//粒子类型


                        3)粒子工场产生的粒子类型,数量等

                         

    final SpriteParticleSystem particleSystem = new SpriteParticleSystem(particleEmitter, 60, 60, 360, this.mParticleTextureRegion, this.getVertexBufferObjectManager());//粒子工厂,参数,60,60是粒子的最大与最小生成速率
    


                      4)粒子的行为方式(旋转,颜色,透明度方面的变化)

                    

    		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>(-2, 2, -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));
    		particleSystem.addParticleModifier(new ColorParticleModifier<Sprite>(0, 3, 1, 1, 0, 0.5f, 0, 0));
    		particleSystem.addParticleModifier(new ColorParticleModifier<Sprite>(4, 6, 1, 1, 0.5f, 1, 0, 1));
    		particleSystem.addParticleModifier(new AlphaParticleModifier<Sprite>(0, 1, 0, 1));
    		particleSystem.addParticleModifier(new AlphaParticleModifier<Sprite>(5, 6, 1, 0));
    


                          5)加载粒子到Sence中

                        

    		scene.attachChild(particleSystem);

                              6)粒子中心开始位置,开闭等

    particleEmitter.setCenter(x,y );
    							particleSystem.setParticlesSpawnEnabled(true);


     

  • 相关阅读:
    iOS开发tips-UITableView、UICollectionView行高/尺寸自适应
    10559
    日志系统之基于Zookeeper的分布式协同设计
    IOS 图片上传处理 图片压缩 图片处理
    istream, outstream使用及常见错误
    matlab 扩大虚拟内存
    github不小心同步覆盖了本地文件
    经典统计语言模型
    Makefile 快速入门
    word2vec——高效word特征提取
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3331340.html
Copyright © 2011-2022 走看看