前言



Modifier的作用是以编程的方式来修改Entity对象的关键属性。开发者可以用它来修改Entity的位置、缩放、颜色、角度、透明值等。介绍各种可用的Modifier类型,并讲述如何将Modifier对象组合成序列来使用。


修改的效果将会在Entity 的 registerEntityModifier之后执行,若被添加Modifier的Entity还没被添加至场景或者图层(没执行attachChild方法),那么效果直到Entity被添加到场景才会执行。



典型用例

entity.registerEntityModifier(new XXXModifier(p1, p2, ...));

上述语句中,entity是已定义好的Entity对象,XXXModifier是接下来将要列出的若干个Modifier类型之一。



相关类

BaseModifier<T>

  1. /**是否当修改器结束时自动反注册 默认true*/

  2. public final void setAutoUnregisterWhenFinished(

  3.                   final boolean pAutoUnregisterWhenFinished)

复制代码

  1. /**添加ModifierListener监听,监听Modifier开始与结束*/

  2. public void addModifierListener(

  3.                   final IModifierListener<T> pModifierListener)

复制代码

  1. /**去除ModifierListener监听,监听Modifier开始与结束*/

  2. public boolean removeModifierListener(

  3.                   final IModifierListener<T> pModifierListener)

复制代码


开发者经常希望组合一系列的Modifier并应用于Entity对象上,下面是组合Modifier:
ParallelEntityModifier     并行Modifier, 可以放置一个或多个IEntityModifier

SequenceEntityModifier 序列Modifier,按顺序一个一个执行

LoopEntityModifier         循环序列Modifier,当前序列执行完后重新执行序列

AlphaModifier                 控制alpha变化的修改器

ScaleModifier                 控制缩放变化的修改器

RotationModifier             控制旋转变化的修改器

ColorModifier                  控制颜色变化的修改器

PathModifier                   路径修改器

DelayModifier                 延时修改器

FadeInModifier              淡入修改器

FadeOutModifier           淡出修改器

JumpModifier                跳跃修改器...


例子

上下来回移动

  1. private void moveBall(){

  2.         Sprite ball = new Sprite(

  3.                         200,         300, ballRegion, getVertexBufferObjectManager());

  4.         MoveYModifier up_mod = new MoveYModifier(0.3f, ball.getY(), ball.getY()-60);

  5.         MoveYModifier down_mod = new MoveYModifier(0.3f, ball.getY()-60, ball.getY());

  6.         SequenceEntityModifier seq_mod = 

  7.                         new SequenceEntityModifier(up_mod,down_mod);

  8.         LoopEntityModifier loop_mod = new LoopEntityModifier(seq_mod);

  9.         ball.registerEntityModifier(loop_mod);

  10.         this.attachChild(ball);

  11. }

复制代码


小球弹跳

  1. private void jumpBall(){

  2.         Sprite ball = new Sprite(200, 300, ballRegion, getVertexBufferObjectManager());

  3.         JumpModifier jump_mod = new JumpModifier(

  4.                         0.6f, ball.getX(), ball.getX(), ball.getY(), ball.getY(), 60);

  5.         LoopEntityModifier loop_mod = new LoopEntityModifier(jump_mod);

  6.         ball.registerEntityModifier(loop_mod);

  7.         this.attachChild(ball);

  8. }

复制代码


放大旋转透明

  1. private void setModifierBall(){

  2.         Sprite ball = new Sprite(200, 300, ballRegion, getVertexBufferObjectManager());

  3.         ScaleModifier scale_mod_front = new ScaleModifier(1, 1, 10);

  4.         RotationAtModifier rotate_mod_front = 

  5.                         new RotationAtModifier(1, 0, 360, ball.getWidthHalf(), ball.getHeightHalf());

  6.         AlphaModifier alpha_mod_front = new AlphaModifier(1, 1, 0);

  7.         ParallelEntityModifier par_mod_front = new ParallelEntityModifier(

  8.                         scale_mod_front,rotate_mod_front,alpha_mod_front);


  9.         ScaleModifier scale_mod_back = new ScaleModifier(1, 10, 1);

  10.         RotationAtModifier rotate_mod_back = 

  11.                         new RotationAtModifier(1, 360, 0, ball.getWidthHalf(), ball.getHeightHalf());

  12.         AlphaModifier alpha_mod_back = new AlphaModifier(1, 0, 1);

  13.         ParallelEntityModifier par_mod_back = new ParallelEntityModifier(

  14.                         scale_mod_back,rotate_mod_back,alpha_mod_back);


  15.         SequenceEntityModifier seq_mod = 

  16.                         new SequenceEntityModifier(par_mod_front,par_mod_back);

  17.         LoopEntityModifier loop_mod = new LoopEntityModifier(seq_mod);

  18.         ball.registerEntityModifier(loop_mod);

  19.         this.attachChild(ball);

  20. }

复制代码

 http://www.eoeandroid.com/forum-863-1.html

www.ogengine.com