【v2.x OGE-example 第二章(第二节) 修改器的使用】
1.位置:Modifier_example-->Modifier2.类名:Modifier
(1).使用modifier可以做出一些精灵的特效,旋转,倾斜,透明,放大,缩小等等。常用的modifier如下,<1>.AlphaModifier透明度修改器 <2>.ColorModifier颜色修改器 <3>.CubicBezierCurveMoveModifier三次方贝塞尔曲线曲线修改器 <4>.DelayModifier延迟修改器 <5>.FadeInModifier淡入修改器 <6>.FadeOutModifier淡出修改器 <7>.JumpModifier跳跃修改器 <8>.MoveByModifier移动修改器(当前位置开始) <9>.MoveModifier移动修改器(从某个点到另外一个点) <10>.MoveXModifier移动X修改器 <11>.MoveYModifier移动Y修改器 <12>.PathModifier路径修改器 <13>.QuadraticBezierCurveMoveModifier二次贝塞尔曲线修改器 <14>.RotationAtModifier旋转修改器(需传入旋转中心点) <15>.RotationByModifier旋转修改器(只需传入旋转到的目标角度) <16>.RotationModifier旋转修改器(从某个角度到另外一个角度) <17>.ScaleAtModifier缩放修改器(需传入缩放中心点) <18>.ScaleModifier缩放修改器(从缩放多少倍数到另外一个倍数) <19>.SkewModifier倾斜修改器 <20>.SkewXModifier倾斜X修改器 <21>.SkewYModifier倾斜Y修改器
<22>.LoopEntityModifier循环容器修改器(使某个动作修改器循环实行) <23>.SequenceEntityModifier序列容器修改器(使某几个动作修改器依次实行) <24>.ParallelEntityModifier并行实体容器修改器(使某几个动作修改器同时实行)
(2).以下是使用modifier的例子:/**普通Modifier用法*/ privatevoidsetGeneralModifier(){ //画蓝色背景填满屏幕 Rectanglerectangle=newRectangle(0,getWidth(),getHeight(),getVertexBufferObjectManager()); rectangle.setColor(0.09804f,0.6274f,0.8784f); this.attachChild(rectangle);//加入场景 AnimatedSpriteface_rect=newAnimatedSprite(gap*1,150,Regions.FACE_RECTANGLE,getVertexBufferObjectManager()); this.attachChild(face_rect); //2秒内从0度转到360度 RotationModifierrotation_mod=newRotationModifier(2,360); //注册一个Modifier(修改器)在face_rect中 face_rect.registerEntityModifier(rotation_mod); }
/**安先后顺序执行Modifier用法*/ privatevoidsetSequenceEntityModifier(){ AnimatedSpriteface_rect=newAnimatedSprite(gap*2,360); //1秒内从1倍放大到2倍 ScaleModifierscale_mod=newScaleModifier(1,1,2); //定制两个Modifier按先后顺序执行 SequenceEntityModifiersequence_mod=newSequenceEntityModifier(rotation_mod,scale_mod); //注册一个Modifier(修改器)在face_rect中 face_rect.registerEntityModifier(sequence_mod); }
/**循环执行的Modifier*/ privatevoidsetLoopEntityModifier(){ AnimatedSpriteface_rect=newAnimatedSprite(gap*3,2); //延时0.5s DelayModifierdelay_mod=newDelayModifier(0.5f); //Modifier按先后顺序执行 SequenceEntityModifiersequence_mod=newSequenceEntityModifier(rotation_mod,delay_mod,scale_mod); //Modifier循环执行 LoopEntityModifierloop_mod=newLoopEntityModifier(sequence_mod); //注册一个Modifier(修改器)在face_rect中 face_rect.registerEntityModifier(loop_mod); } /**Modifier加入监听器*/ privatevoidsetModifierListener(){ AnimatedSpriteface_rect=newAnimatedSprite(gap*4,360); //IEntityModifierListenerModifier监听器,监听开始、结束 LoopEntityModifierloop_mod=newLoopEntityModifier(rotation_mod,5,newIEntityModifierListener(){ @Override publicvoidonModifierStarted(IModifier<IEntity>pModifier,IEntitypItem){ //pItem=whichwillberegister System.out.println("onModifierStarted"); pItem.setVisible(true); } @Override publicvoidonModifierFinished(IModifier<IEntity>pModifier,IEntitypItem){ //pItem=whichwillberegister System.out.println("onModifierFinished"); pItem.setVisible(false); } }); //注册一个Modifier(修改器)在face_rect中 face_rect.registerEntityModifier(loop_mod); } /**一个并行Modifier*/ privatevoidsetParallelEntityModifier(){ AnimatedSpriteface_ball=newAnimatedSprite(gap*1,300,Regions.FACE_BALL,getVertexBufferObjectManager()); //1秒内从0度转到360度 RotationModifierrotation_mod=newRotationModifier(1,2); //1秒内透明度从1到0 AlphaModifieralpha_mod=newAlphaModifier(1,0); //并行Modifier ParallelEntityModifierparallel_mod=newParallelEntityModifier(rotation_mod,scale_mod,alpha_mod); //循环Modifier LoopEntityModifierloop_mod=newLoopEntityModifier(parallel_mod); //注册Modifier face_ball.registerEntityModifier(loop_mod); //加入场景 this.attachChild(face_ball); } privatevoidirregular_EntityModifiers(){ finalAnimatedSpriteface1=newAnimatedSprite(gap*2,this.getVertexBufferObjectManager()); face1.setRotationCenter(0,0);//设置左上角为旋转中心点 face1.setScaleCenter(0,0);//设置左上角为放大中心点 face1.animate(100);
finalAnimatedSpriteface2=newAnimatedSprite(gap*3,this.getVertexBufferObjectManager()); face2.animate(100);
finalSequenceEntityModifierentityModifier=newSequenceEntityModifier( newIEntityModifierListener(){ @Override publicvoidonModifierStarted(finalIModifier<IEntity>pModifier,finalIEntitypItem){ System.out.println("Sequencestarted."); }
@Override publicvoidonModifierFinished(finalIModifier<IEntity>pEntityModifier,finalIEntitypEntity){ System.out.println("Sequencefinished."); } }, //第一步:2秒X从1.0缩小到0.75,Y从1.0放大到2.0 newScaleModifier(2,1.0f,0.75f,2.0f), //第二步:2秒X从0.75放大到2.0,Y从2.0缩小到1.25 newScaleModifier(2,2.0f,1.25f), //第三步:放大并旋转 newParallelEntityModifier( newScaleModifier(3,5.0f,1.25f,5.0f),//3秒X从2.0放大到5.0,Y从1.25放大到5.0 newRotationByModifier(3,180)//3秒旋转到180度 ), //第四步:缩小并旋转 newParallelEntityModifier( newScaleModifier(3,1),//3秒从5缩小到1 newRotationModifier(3,180,0)//3秒旋转从180到0 ) );
//注册entityModifier到face1 face1.registerEntityModifier(entityModifier); //拷贝出一个entityModifier注册到face2 face2.registerEntityModifier(entityModifier.deepCopy());
this.attachChild(face1);//加入场景 this.attachChild(face2);//加入场景
/*Createsomenot-modifiedsprites,thatactasfixedreferencestothemodifiedones.*/ /*加入两个没有做任何动作的精灵作为参考*/ finalAnimatedSpriteface1Reference=newAnimatedSprite(face1.getX(),face1.getY(),face1.getTiledTextureRegion(),this.getVertexBufferObjectManager()); finalAnimatedSpriteface2Reference=newAnimatedSprite(face2.getX(),face2.getY(),face2.getTiledTextureRegion(),this.getVertexBufferObjectManager());
this.attachChild(face1Reference); this.attachChild(face2Reference); }
OGE_Example项目源码 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |