2013-03-14 32 views
1

我試圖把LoopEntityModifier的精靈能繼續向前向後移動AndEngine - LoopEntityModifier連續forwad向後移動

但有些事是不對的。

運動不順暢。

我想我在重新設置循環出錯。

我該如何平滑移動。

LoopEntityModifier looper = new LoopEntityModifier (

    new IEntityModifierListener(){ 
     public void onModifierStarted(
       IModifier<IEntity> pModifier, IEntity pItem) { 
      // TODO Auto-generated method stub 
      Log.d("Modifier","Modifier Started !!"); 
     } 

     public void onModifierFinished(
       IModifier<IEntity> pModifier, IEntity pItem) { 
      // TODO Auto-generated method stub 

      Log.d("Modifier","Modifier Finished !!"); 

      pModifier.reset(); 
     } 
    }, 

    1, 

    new ILoopEntityModifierListener(){ 
     public void onLoopStarted(
       LoopModifier<IEntity> pLoopModifier, int pLoop, 
       int pLoopCount) { 
      // TODO Auto-generated method stub 

      Log.d("Modifier","Loop Started !!");  
     } 

     public void onLoopFinished(
       LoopModifier<IEntity> pLoopModifier, int pLoop, 
       int pLoopCount) { 
      // TODO Auto-generated method stub 

      Log.d("Modifier","Loop Finished !!"); 
     } 
    }, 
    new SequenceEntityModifier(
      //Forward 
      new MoveXModifier(.5f,mNextSprite.getX(),mNextSprite.getX()+50), 

      //Backward 
      new MoveXModifier(.5f,mNextSprite.getX(),mNextSprite.getX()-50)) 
); 

mNextSprite.registerEntityModifier(looper); 

回答

2

您可以使用MoveByModifier。它的工作很好。

new SequenceEntityModifier(
     new MoveByModifier(0.5f, 100, 0), 
     new MoveByModifier(0.5f, -100, 0) 
)); 

,如果你不使用,然後在你的代碼替換這個

new SequenceEntityModifier(
      // Forward 
      new MoveXModifier(.5f, mNextSprite.getX(), 
      mNextSprite.getX() + 50), 
      // Backward 
      new MoveXModifier(.5f, mNextSprite.getX() + 50, 
      mNextSprite.getX()) 

LoopEntityModifier looper = new LoopEntityModifier (

new IEntityModifierListener(){ 
    public void onModifierStarted(
      IModifier<IEntity> pModifier, IEntity pItem) { 
     // TODO Auto-generated method stub 
     Log.d("Modifier","Modifier Started !!"); 
    } 

    public void onModifierFinished(
      IModifier<IEntity> pModifier, IEntity pItem) { 
     // TODO Auto-generated method stub 

     Log.d("Modifier","Modifier Finished !!"); 

     pModifier.reset(); 
    } 
}, 

1, 

new ILoopEntityModifierListener(){ 
    public void onLoopStarted(
      LoopModifier<IEntity> pLoopModifier, int pLoop, 
      int pLoopCount) { 
     // TODO Auto-generated method stub 

     Log.d("Modifier","Loop Started !!");  
    } 

    public void onLoopFinished(
      LoopModifier<IEntity> pLoopModifier, int pLoop, 
      int pLoopCount) { 
     // TODO Auto-generated method stub 

     Log.d("Modifier","Loop Finished !!"); 
    } 
}, 
new SequenceEntityModifier(
      // Forward 
      new MoveXModifier(.5f, mNextSprite.getX(), 
      mNextSprite.getX() + 50), 
      // Backward 
      new MoveXModifier(.5f, mNextSprite.getX() + 50, 
      mNextSprite.getX()) 
); 

mNextSprite.registerEntityModifier(looper); 
+0

但是,這隻會有1個向前和向後移動。我希望精靈能夠繼續前進。 – 2013-03-20 06:04:42

+0

@ChaitanyaChandurkar更新我的答案,這完全在我的設備中工作。 – 2013-03-20 06:16:35

0

由於Divyang Metalia的答案,我想出了以下兩種方法來製作動畫精靈的連續往復運動。它使用SequenceEntityModifier,並在完成時將其重置。停止動畫stopAnimation()清除所有的改性劑和重置精靈位置的方法:

public void startAnimation() { 
    this.from = this.getX();  // just an example start point (global) 
    float to = from +100 ;   // example end point for the animation 

    MoveXModifier rightMovement = new MoveXModifier(0.5f, from, to); 
    MoveXModifier leftMovement = new MoveXModifier(0.5f, to, from); 

    SequenceEntityModifier sequenceEntityModifier = new SequenceEntityModifier(rightMovement, leftMovement) { 
     @Override 
     protected void onModifierFinished(IEntity pItem) { 
      super.reset(); 
     } 
    }; 
    sequenceEntityModifier.setAutoUnregisterWhenFinished(false); 
    this.registerEntityModifier(sequenceEntityModifier); 
} 

public void stopAnimation() { 
    this.clearEntityModifiers(); 
    this.setX(from); 
} 

澄清:該方法是a Sprite延伸類的一部分。