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 не прави достатъчно дълбоко копие.

Методът за дълбоко копиране прави следното:

return new SequenceEntityModifier(this);

Което ще изключи вашите замени на onModifierStarted и onModifierFinished.

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

person Plastic Sturgeon    schedule 13.12.2013