Andengine - IEntityModifierListener не работает

Я пытаюсь использовать модификатор сущности для управления некоторыми спрайтами, и после завершения он должен отменить регистрацию самого себя. Я также добавил логическое значение, чтобы гарантировать, что оно не сработает снова во время движения. Проблема в том, что методы onModifierStarted и onModifierFinished не срабатывают.

Это код, который устанавливает модификатор сущности

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

person stumct    schedule 13.12.2013    source источник


Ответы (1)


Проблема в том, что deepCopy не делает достаточно глубокую копию.

Метод глубокого копирования jsut делает следующее:

return new SequenceEntityModifier(this);

Что исключит ваши переопределения onModifierStarted и onModifierFinished.

Вместо этого попробуйте создать закрытый класс, который расширяет SequenceEntityModifier, и используйте его. Или создайте метод, который вы можете передать своим спрайтам и кнопкам, который добавит к нему прослушиватель сущностей.

person Plastic Sturgeon    schedule 13.12.2013