首页 > 代码库 > 【v2.x OGE-example 第二章(第二节) 修改器的使用】
【v2.x OGE-example 第二章(第二节) 修改器的使用】
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用法*/
private void setGeneralModifier() {
//画蓝色背景 填满屏幕
Rectangle rectangle = new Rectangle(0, 0, getWidth(), getHeight(), getVertexBufferObjectManager());
rectangle.setColor(0.09804f, 0.6274f, 0.8784f);
this.attachChild(rectangle);//加入场景
AnimatedSprite face_rect = new AnimatedSprite(gap*1, 150, Regions.FACE_RECTANGLE, getVertexBufferObjectManager());
this.attachChild(face_rect);
//2秒内 从0度转到360度
RotationModifier rotation_mod = new RotationModifier(2, 0, 360);
//注册一个Modifier(修改器)在face_rect中
face_rect.registerEntityModifier(rotation_mod);
}
/**安先后顺序执行Modifier用法*/
private void setSequenceEntityModifier(){
AnimatedSprite face_rect = new AnimatedSprite(gap*2, 150, Regions.FACE_RECTANGLE, getVertexBufferObjectManager());
this.attachChild(face_rect);
//2秒内 从0度转到360度
RotationModifier rotation_mod = new RotationModifier(2, 0, 360);
//1秒内 从1倍放大到2倍
ScaleModifier scale_mod = new ScaleModifier(1, 1, 2);
//定制两个Modifier按先后顺序执行
SequenceEntityModifier sequence_mod = new SequenceEntityModifier(rotation_mod, scale_mod);
//注册一个Modifier(修改器)在face_rect中
face_rect.registerEntityModifier(sequence_mod);
}
/**循环执行的Modifier*/
private void setLoopEntityModifier(){
AnimatedSprite face_rect = new AnimatedSprite(gap*3, 150, Regions.FACE_RECTANGLE, getVertexBufferObjectManager());
this.attachChild(face_rect);
//2秒内 从0度转到360度
RotationModifier rotation_mod = new RotationModifier(2, 0, 360);
//1秒内 从1倍放大到2倍
ScaleModifier scale_mod = new ScaleModifier(1, 1, 2);
//延时0.5s
DelayModifier delay_mod = new DelayModifier(0.5f);
//Modifier按先后顺序执行
SequenceEntityModifier sequence_mod = new SequenceEntityModifier(rotation_mod, delay_mod, scale_mod);
//Modifier 循环执行
LoopEntityModifier loop_mod = new LoopEntityModifier(sequence_mod);
//注册一个Modifier(修改器)在face_rect中
face_rect.registerEntityModifier(loop_mod);
}
/**Modifier 加入监听器*/
private void setModifierListener(){
AnimatedSprite face_rect = new AnimatedSprite(gap*4, 150, Regions.FACE_RECTANGLE, getVertexBufferObjectManager());
this.attachChild(face_rect);
//2秒内 从0度转到360度
RotationModifier rotation_mod = new RotationModifier(2, 0, 360);
//IEntityModifierListener Modifier监听器,监听开始、结束
LoopEntityModifier loop_mod = new LoopEntityModifier(rotation_mod, 5, new IEntityModifierListener() {
@Override
public void onModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) {
//pItem = which will be register
System.out.println("onModifierStarted");
pItem.setVisible(true);
}
@Override
public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) {
//pItem = which will be register
System.out.println("onModifierFinished");
pItem.setVisible(false);
}
});
//注册一个Modifier(修改器)在face_rect中
face_rect.registerEntityModifier(loop_mod);
}
/**一个并行Modifier*/
private void setParallelEntityModifier(){
AnimatedSprite face_ball = new AnimatedSprite(gap*1, 300, Regions.FACE_BALL, getVertexBufferObjectManager());
//1秒内 从0度转到360度
RotationModifier rotation_mod = new RotationModifier(1, 0, 360);
//1秒内 从1倍放大到2倍
ScaleModifier scale_mod = new ScaleModifier(1, 1, 2);
//1秒内 透明度从1到0
AlphaModifier alpha_mod = new AlphaModifier(1, 1, 0);
//并行 Modifier
ParallelEntityModifier parallel_mod = new ParallelEntityModifier(rotation_mod,scale_mod,alpha_mod);
//循环 Modifier
LoopEntityModifier loop_mod = new LoopEntityModifier(parallel_mod);
//注册 Modifier
face_ball.registerEntityModifier(loop_mod);
//加入场景
this.attachChild(face_ball);
}
private void irregular_EntityModifiers(){
final AnimatedSprite face1 = new AnimatedSprite(gap*2, 300, Regions.FACE_BALL, this.getVertexBufferObjectManager());
face1.setRotationCenter(0, 0);//设置左上角为旋转中心点
face1.setScaleCenter(0, 0);//设置左上角为放大中心点
face1.animate(100);
final AnimatedSprite face2 = new AnimatedSprite(gap*3, 300, Regions.FACE_RECTANGLE, this.getVertexBufferObjectManager());
face2.animate(100);
final SequenceEntityModifier entityModifier = new SequenceEntityModifier(
new IEntityModifierListener() {
@Override
public void onModifierStarted(final IModifier<IEntity> pModifier, final IEntity pItem) {
System.out.println("Sequence started.");
}
@Override
public void onModifierFinished(final IModifier<IEntity> pEntityModifier, final IEntity pEntity) {
System.out.println("Sequence finished.");
}
},
//第一步:2秒 X从1.0缩小到0.75,Y从1.0放大到2.0
new ScaleModifier(2, 1.0f, 0.75f, 1.0f, 2.0f),
//第二步:2秒 X从0.75放大到2.0,Y从2.0缩小到1.25
new ScaleModifier(2, 0.75f, 2.0f, 2.0f, 1.25f),
//第三步:放大并旋转
new ParallelEntityModifier(
new ScaleModifier(3, 2.0f, 5.0f, 1.25f, 5.0f),//3秒 X从2.0放大到5.0,Y从1.25放大到5.0
new RotationByModifier(3, 180)//3秒 旋转到180度
),
//第四步:缩小并旋转
new ParallelEntityModifier(
new ScaleModifier(3, 5, 1),//3秒 从5缩小到1
new RotationModifier(3, 180, 0)//3秒 旋转从180到0
)
);
//注册 entityModifier 到face1
face1.registerEntityModifier(entityModifier);
//拷贝出一个 entityModifier 注册到face2
face2.registerEntityModifier(entityModifier.deepCopy());
this.attachChild(face1);//加入场景
this.attachChild(face2);//加入场景
/* Create some not-modified sprites, that act as fixed references to the modified ones. */
/* 加入两个没有做任何动作的精灵作为参考 */
final AnimatedSprite face1Reference = new AnimatedSprite(face1.getX(), face1.getY(), face1.getTiledTextureRegion(), this.getVertexBufferObjectManager());
final AnimatedSprite face2Reference = new AnimatedSprite(face2.getX(), face2.getY(), face2.getTiledTextureRegion(), this.getVertexBufferObjectManager());
this.attachChild(face1Reference);
this.attachChild(face2Reference);
}
OGE_Example项目源码
【v2.x OGE-example 第二章(第二节) 修改器的使用】