2013-02-25 23 views
0

我想要实现的是改变mRectangles属性,例如用户在设置中更改它的持续时间。我读过,我想使用modifier.reset()与原始的各自参数。我似乎无法弄清楚我应该通过第四个参数。是否有我应该调用的变量或函数来获取正确的上下文?如何更新Andengine的实体修饰符?

@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

你能澄清你在问什么吗?你提到你的目标是“改变mRectangles属性,如持续时间”,但是Rectangle没有持续时间属性。如果你的意思是改变修饰符的持续时间,为什么不传递硬编码值? (即,您的颜色修饰符的构造函数都具有硬编码5秒的持续时间)。 – 2013-02-25 09:16:39

+0

是的,它最初是硬编码的,但我允许用户更改偏好活动的颜色和持续时间属性。这就是为什么我使用修饰符的接口方法。所以,我可以在线程中运行时检查属性。感谢您的反馈。 – wavyGravy 2013-02-25 16:40:13

+0

那么你的问题是什么?如何用变量替换数字5? – 2013-02-25 16:54:50

回答

1

有两种方法可以做到这一点。要么你可以重写修饰符中的内置方法(也就是说,你可以@override onUpdate())并在那里执行你自己的逻辑,或者你可以用更简单的方法去除它:去掉现有的修饰符并堆栈新的那些。

您在评论中提到:“我试过清理并添加了另一个颜色修饰符,但没有解决问题,”但没有详细说明原因。如果您的意思是您收到了一些错误,请发布错误消息,我们可以讨论它。如果你的意思是你没有从现有颜色到新颜色的“平滑”转换(这是有意义的),你应该做的是让新的修改器从当前存在的值开始。换句话说,在进行颜色修改器时,为其提供“From”和“To”颜色,请使用mRectangle.getColor()作为“From”,以便您可以从当前位置开始进行转换。

+0

啊,我会用其他方法重写所有内容,并将逻辑放在那里。我想我会尝试查看mRectangle的onManagedUpdate()是否可以使用。我尝试使用清除修饰符,它只能工作一次,因为我用另一个嵌套修饰符侦听器来重新启动它。我认为我的逻辑在那个时候是有缺陷的。感谢您的反馈。谢谢你这么烂。我会回报。 – wavyGravy 2013-02-26 16:30:30

+0

@wavyGravy酷。让我们知道它是如何工作的。另外,如果此答案对您有帮助,请考虑给予绿色验收标记。 – 2013-02-26 19:01:11

+0

我知道它正确更新。原来,我根本不需要用第四个未知参数来使用这个方法。我只需要清除它并在onModifierStarted()中启动一个新的实体修饰符栈。当我测试时,我一定在破解。谢谢! – wavyGravy 2013-02-27 06:32:41