前言
Modifier的作用是以编程的方式来修改Entity对象的关键属性。开发者可以用它来修改Entity的位置、缩放、颜色、角度、透明值等。介绍各种可用的Modifier类型,并讲述如何将Modifier对象组合成序列来使用。
修改的效果将会在Entity 的 registerEntityModifier之后执行,若被添加Modifier的Entity还没被添加至场景或者图层(没执行attachChild方法),那么效果直到Entity被添加到场景才会执行。
典型用例
entity.registerEntityModifier(new XXXModifier(p1, p2, ...));
上述语句中,entity是已定义好的Entity对象,XXXModifier是接下来将要列出的若干个Modifier类型之一。
相关类
BaseModifier<T>
/**是否当修改器结束时自动反注册 默认true*/
public final void setAutoUnregisterWhenFinished(
final boolean pAutoUnregisterWhenFinished)
复制代码
/**添加ModifierListener监听,监听Modifier开始与结束*/
public void addModifierListener(
final IModifierListener<T> pModifierListener)
复制代码
/**去除ModifierListener监听,监听Modifier开始与结束*/
public boolean removeModifierListener(
final IModifierListener<T> pModifierListener)
复制代码
开发者经常希望组合一系列的Modifier并应用于Entity对象上,下面是组合Modifier:
ParallelEntityModifier 并行Modifier, 可以放置一个或多个IEntityModifier
SequenceEntityModifier 序列Modifier,按顺序一个一个执行
LoopEntityModifier 循环序列Modifier,当前序列执行完后重新执行序列
AlphaModifier 控制alpha变化的修改器
ScaleModifier 控制缩放变化的修改器
RotationModifier 控制旋转变化的修改器
ColorModifier 控制颜色变化的修改器
PathModifier 路径修改器
DelayModifier 延时修改器
FadeInModifier 淡入修改器
FadeOutModifier 淡出修改器
JumpModifier 跳跃修改器...
例子
上下来回移动
private void moveBall(){
Sprite ball = new Sprite(
200, 300, ballRegion, getVertexBufferObjectManager());
MoveYModifier up_mod = new MoveYModifier(0.3f, ball.getY(), ball.getY()-60);
MoveYModifier down_mod = new MoveYModifier(0.3f, ball.getY()-60, ball.getY());
SequenceEntityModifier seq_mod =
new SequenceEntityModifier(up_mod,down_mod);
LoopEntityModifier loop_mod = new LoopEntityModifier(seq_mod);
ball.registerEntityModifier(loop_mod);
this.attachChild(ball);
}
复制代码
小球弹跳
private void jumpBall(){
Sprite ball = new Sprite(200, 300, ballRegion, getVertexBufferObjectManager());
JumpModifier jump_mod = new JumpModifier(
0.6f, ball.getX(), ball.getX(), ball.getY(), ball.getY(), 60);
LoopEntityModifier loop_mod = new LoopEntityModifier(jump_mod);
ball.registerEntityModifier(loop_mod);
this.attachChild(ball);
}
复制代码
放大旋转透明
private void setModifierBall(){
Sprite ball = new Sprite(200, 300, ballRegion, getVertexBufferObjectManager());
ScaleModifier scale_mod_front = new ScaleModifier(1, 1, 10);
RotationAtModifier rotate_mod_front =
new RotationAtModifier(1, 0, 360, ball.getWidthHalf(), ball.getHeightHalf());
AlphaModifier alpha_mod_front = new AlphaModifier(1, 1, 0);
ParallelEntityModifier par_mod_front = new ParallelEntityModifier(
scale_mod_front,rotate_mod_front,alpha_mod_front);
ScaleModifier scale_mod_back = new ScaleModifier(1, 10, 1);
RotationAtModifier rotate_mod_back =
new RotationAtModifier(1, 360, 0, ball.getWidthHalf(), ball.getHeightHalf());
AlphaModifier alpha_mod_back = new AlphaModifier(1, 0, 1);
ParallelEntityModifier par_mod_back = new ParallelEntityModifier(
scale_mod_back,rotate_mod_back,alpha_mod_back);
SequenceEntityModifier seq_mod =
new SequenceEntityModifier(par_mod_front,par_mod_back);
LoopEntityModifier loop_mod = new LoopEntityModifier(seq_mod);
ball.registerEntityModifier(loop_mod);
this.attachChild(ball);
}
复制代码
http://www.eoeandroid.com/forum-863-1.html