【v2.x OGE-example 第二章(第二節) 修改器的使用】

1. 位置:Modifier_example --> Modifier
2. 類名:Modifier

wKiom1RbPfKQMejeAABk3Gz1X7A620.jpg 

 

(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項目源碼

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章