2013-12-13 22 views
2

我正在嘗試使用實體修飾符來操縱一些精靈,一旦完成它應該註銷自己。我還添加了一個布爾值以確保它在運動時不會再次觸發。問題是onModifierStarted和onModifierFinished方法似乎不會觸發。Andengine - IEntityModifierListener不工作

這是建立實體改性劑

entityModifier = new SequenceEntityModifier(new IEntityModifierListener() { 

     @Override 
     public void onModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) { 
      // TODO Auto-generated method stub 
      enabled = false; 
     } 

     @Override 
     public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) { 
      // TODO Auto-generated method stub 
       enabled = true; 
       pItem.unregisterEntityModifier((IEntityModifier) pModifier); 
       pModifier.reset(); 
     } 
    }, 
    new AlphaModifier(2f, 1f, 0f), 
      new RotationModifier(1, 0, 90), 
      new AlphaModifier(2, 1, 0), 
      new AlphaModifier(1, 0, 1), 
      new ScaleModifier(2, 1, 0.5f), 
      new DelayModifier(0.5f), 
      new ParallelEntityModifier(
             new ScaleModifier(3, 0.5f, 5), 
             new RotationByModifier(3, 90) 
             ), 
             new ParallelEntityModifier(
                   new ScaleModifier(3, 5, 1), 
                   new RotationModifier(3, 180, 0) 
                 ) 
      ); 

這是哪些寄存器改性劑到精靈的方法的代碼。這是觸摸事件觸發的

public void down(){ 
    if (enabled) { 
     TitleSprite.registerEntityModifier(entityModifier.deepCopy()); 
     OptionsButton.registerEntityModifier(entityModifier.deepCopy()); 
     PlayButton.registerEntityModifier(entityModifier.deepCopy()); 
    } 
} 

回答

0

問題是,deepCopy沒有製作足夠深的副本。

完全複製方法僅僅指剛做這個的:

return new SequenceEntityModifier(this); 

這將排除您onModifierStarted的覆蓋和onModifierFinished。

而是嘗試製作一個擴展SequenceEntityModifier的私有類,然後使用它。或者創建一個方法,你可以通過你的精靈和按鈕來添加一個實體監聽器。