1.位置:Modifier_example-->Modifier
2.类名: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);
}