2013-02-25 25 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