2012-01-18 1 views
2

У меня есть следующий код для спрайта, который следует по пути с помощью Andengine. Мне нужно изменить скорость (скорость) спрайтов, движущихся вдоль пути(). Кто-нибудь знает, как изменить скорость по пути?andengine pathmodifier speed

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); 

 Смежные вопросы

  • Нет связанных вопросов^_^