首页 > 代码库 > 【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秒内 透明度从10

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秒  X1.0缩小到0.75Y1.0放大到2.0

new ScaleModifier(2, 1.0f, 0.75f, 1.0f, 2.0f),

//第二步:2秒  X0.75放大到2.0Y2.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秒  X2.0放大到5.0Y1.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秒 旋转从1800

)

);

 

//注册 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 第二章(第二节) 修改器的使用】