2013-12-13 5 views
2

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

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

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

ответ

0

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

Глубинный метод копирования этого нужно просто делает это:

return new SequenceEntityModifier(this); 

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

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

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