我想要实现的是改变mRectangles属性,例如用户在设置中更改它时的持续时间。我已经读过,我想使用modifier.reset()和原始的相应参数。我似乎无法弄清楚我应该在第四个参数中传递什么。是否有变量或函数我应该调用以获得正确的上下文?
@Override
public void onPopulateScene(Scene pScene,
OnPopulateSceneCallback pOnPopulateSceneCallback) throws Exception {
// TODO Auto-generated method stub
Rectangle mRectangle = new Rectangle(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT,
mEngine.getVertexBufferObjectManager());
// With this anonymous function, you can add events to the beginning and end
// of the modified state
IEntityModifierListener mIEntityModifierListener = new IEntityModifierListener() {
@Override
public void onModifierStarted(IModifier<IEntity> pModifier,
IEntity pItem) {
// Grab the current duration value and compare it to the
// one that's stored
final int mDuration = (int) pModifier.getDuration();
Log.i("MODIFIER", "Current duration value: " + mDuration);
if(mDuration != mDurationPref)
{
Log.i("UPDATEDURATION","Duration value: " + mDurationPref);
mFinalDuration = mDurationPref;
pModifier.reset();
}
else
{
Log.i("UPDATEDURATION","Both values match: " + COLORONE_DEFAULT);
mFinalDuration = COLORONE_DEFAULT;
}
}
@Override
public void onModifierFinished(IModifier<IEntity> pModifier,
IEntity pItem) {
// TODO Auto-generated method stub
Log.i("MODIFIER", "It finished!");
}
};
Log.i("FINALDURATIONVALUE", "Final duration: " + mFinalDuration);
// This is where you can chain up the colors
// TODO: Make this in to a function that interpolates the colors together
ColorModifier mColorModifier = new ColorModifier(5, Color.CYAN,
Color.RED, mIEntityModifierListener, EaseSineIn.getInstance());
ColorModifier tColorModifier = new ColorModifier(5, Color.RED,
Color.CYAN, EaseSineInOut.getInstance());
ColorModifier iColorModifier = new ColorModifier(5, Color.CYAN,
Color.GREEN, mIEntityModifierListener, EaseSineIn.getInstance());
ColorModifier xColorModifier = new ColorModifier(5, Color.GREEN,
Color.YELLOW, EaseSineInOut.getInstance());
ColorModifier yColorModifier = new ColorModifier(5, Color.YELLOW,
Color.CYAN, mIEntityModifierListener, EaseSineIn.getInstance());
// The sequence modifier will go through the color modifiers
// and the loop entity modifier makes it continuous
SequenceEntityModifier mSequenceEntityModifier = new SequenceEntityModifier(
mColorModifier, tColorModifier, iColorModifier, xColorModifier,
yColorModifier);
LoopEntityModifier mLoopEntityModifier = new LoopEntityModifier(
mSequenceEntityModifier);
mRectangle.registerEntityModifier(mLoopEntityModifier);
scene.attachChild(mRectangle);
pOnPopulateSceneCallback.onPopulateSceneFinished();
}
答案 0 :(得分:1)
有两种方法可以做到这一点。您可以在修改器中重写内置方法(即,您可以@override onUpdate())并在那里执行您自己的逻辑,或者您可以更简单的方式执行此操作:剥离现有修改器并在新的上叠加的。
你在评论中提到过,&#34;我已经尝试过清除和添加另一种颜色修饰符但是没有成功,&#34;但没有详细说明原因。如果您的意思是收到了一些错误,请发布错误消息,我们可以讨论它。如果你的意思是你没有得到顺利的&#34;从现有颜色转换为新颜色(这是有意义的),您应该做的是从当前现有值开始新修饰符。换句话说,在做颜色修饰符时,你可以给它一个&#34; From&#34;和&#34; To&#34;颜色,使用mRectangle.getColor()作为&#34; From&#34;所以你可以从目前的任何地方开始过渡。