скорость двигателя - PullRequest
       24

скорость двигателя

2 голосов
/ 18 января 2012

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

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

Ответы [ 3 ]

2 голосов
/ 12 июля 2013

Вы можете использовать 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);
2 голосов
/ 18 января 2012

Вы можете дать только длительность хода, 1 за модификатор пути. Так что, если вы хотите разные скорости в разных точках пути, вам придется создавать разные модификаторы пути.

1 голос
/ 23 августа 2012

Мое решение для подобной проблемы было получено из исходного модификатора и добавив коэффициент к прошедшему времени:

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