2012-01-18 12 views
2

Andengineを使ってパスに従うスプライトのコードは次のとおりです。パスに沿って移動するスプライトの速度(速度)を変更する必要があります()。誰かが経路に沿って速度を変える方法を知っていますか?andengine pathmodifier velocity

private void follow_path5(final AnimatedSprite tSprite,int i) { 
    final Path path = new Path(5) 
    .to(20, startY) 
    .to(416.0f, startY) 
    .to(20.0f, startY) 
    .to(416.0f,startY) 
    .to(20.0f,startY); 

    // Add the proper animation when a waypoint of the path is passed. 
    tSprite.registerEntityModifier(new PathModifier(30.0f, path, null, new IPathModifierListener() { 
     @Override 
     public void onPathStarted(final PathModifier pPathModifier, final IEntity pEntity) { 

     } 

     @Override 
     public void onPathWaypointStarted(final PathModifier pPathModifier, final IEntity pEntity, final int pWaypointIndex) { 

      switch(pWaypointIndex) { 
      case 0: case 1: case 2: case 3: 
       final long[] frameDurations = new long[3]; 
       Arrays.fill(frameDurations, 500); 
       tSprite.animate(frameDurations, 2, 4, true); 

       break; 

      case 4: case 5: case 6: case 7: 
       final long[] frameDurations1 = new long[3]; 
       Arrays.fill(frameDurations1, 500); 
       tSprite.animate(frameDurations1, 5, 7, true); 

       break; 

      case 8: case 9: case 10: case 11: 
       final long[] frameDurations2 = new long[3]; 
       Arrays.fill(frameDurations2, 500); 
       tSprite.animate(frameDurations2, 2, 4, true); 

       break; 

      case 12: case 13: case 14: 
       final long[] frameDurations3 = new long[3]; 
       Arrays.fill(frameDurations3, 500); 
       tSprite.animate(frameDurations3, 5, 7, true); 

       break; 
      } 
     } 

     @Override 
     public void onPathWaypointFinished(final PathModifier pPathModifier, final IEntity pEntity, final int pWaypointIndex) { 

     } 

     @Override 
     public void onPathFinished(final PathModifier pPathModifier, final IEntity pEntity) { 
     }})); 
    scene.attachChild(asprVamp[i]); 
} 
+0

私は部分的にスプライトが動作しますが、少しぎくしゃくアニメーション – ITECH

+0

何素敵なハックを生成し、ランダムな間隔で走行しているの経路に沿って負の方向に少し移動する別のパスを実行するために)(実行可能を使用してこれを解決しました私は決してこれについて考えなかったでしょう:-) – JohnEye

答えて

2

移動の遅延を与えることができるのは、パスごとに1つの修飾子だけです。したがって、異なるパス・ポイントで異なる速度を望む場合、異なるパス・モディファイアを作成する必要があります。

同様の問題のために私のソリューションは、元の修飾から派生し、経過時間に係数を加えるた
+0

パスに沿った速度を変更することを検討していますが、実際にはわずかに異なるスピードで動作するスプライトの印象を与えるために、少しだけ時間をランダムに変更する必要があります。木の木が見えないことがあります。それに感謝します。 – ITECH

1

@Override 
public float onUpdate(float pSecondsElapsed, IEntity pItem) { 
    return super.onUpdate(pSecondsElapsed*frequency, pItem); 
} 
2

あなたがいるので、あなたの要求を満たすであろう、一つに異なるエンティティ修飾子を組み合わせることSequenceEntityModifierを使用することができます各PathModifierは、異なる時間長を有することができる。

Path a = new Path(2).to(0, 0).to(400,0); 
    Path b = new Path(2).to(400, 0).to(800, 0); 

    IEntityModifier[] modifier = new IEntityModifier[2]; 
    modifier[0] = new PathModifier(3, a); 
    modifier[1] = new new PathModifier(1, b); 

    IEntityModifier entMod = new SequenceEntityModifier(modifier); 
    entity.registerEntityModifier(entMod); 
    scene.attachChild(entity);