【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用法*/

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秒内透明度从10

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.");

}

},

//第一步:2X1.0缩小到0.75Y1.0放大到2.0

newScaleModifier(2,1.0f,0.75f,2.0f),

//第二步:2X0.75放大到2.0Y2.0缩小到1.25

newScaleModifier(2,2.0f,1.25f),

//第三步:放大并旋转

newParallelEntityModifier(

newScaleModifier(3,5.0f,1.25f,5.0f),//3X2.0放大到5.0Y1.25放大到5.0

newRotationByModifier(3,180)//3秒旋转到180

),

//第四步:缩小并旋转

newParallelEntityModifier(

newScaleModifier(3,1),//3秒从5缩小到1

newRotationModifier(3,180,0)//3秒旋转从1800

)

);

//注册entityModifierface1

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项目源码

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...