Хорошо, поэтому я пытаюсь украсить класс актера Libgdx другими действиями
public Shake(Button buttonToBeDecorated) extends ButtonDecorator {
super(buttonToBeDecorated);
Array<Action> actions = buttonToBeDecorated.getActions();
for (Action action : actions)
addAction(action);
addAction(Actions.forever(new SequenceAction(
Actions.moveBy(10, 0, 0.5f),
Actions.moveBy(-10, 0, 0.5f)))
);
}
однако действия из класса toBeDecorated (которые также заключены в SequenceAction) не применяются к экземпляру Shake. Я уверен, что действия пройдены правильно, потому что я могу их распечатать. Но я не получаю комбинированный эффект, может быть, некоторые из вас знают, почему? Спасибо
РЕДАКТИРОВАТЬ: (на основе нового ответа от @DHa)
Мне кажется, я понял этот обходной путь для группы, который вы представили. Однако я все еще не могу заставить это работать. Для этого примера давайте предположим, что мы украшаем объект кнопки с помощью действия Shake, а затем с помощью действия FadeOut (оба этих класса имеют переменную «Group», расширенную от родительского класса ButtonDecorator). Таким образом, создание этого типа объекта будет выглядеть так:
Button button = new Decorators.FadeOut(new Decorators.Shake(new Buttons.PlayButton()));
И классы:
//Shake class - we just simply add Shake actor to group and then add a specific action
//this works perfectly fine by itself - new Decorators.Shake(new Buttons.PlayButton())
public static class Shake extends ButtonDecorator {
public Shake(Button buttonToBeDecorated) {
super(buttonToBeDecorated);
group.addActor(this);
group.addAction(Actions.forever(new SequenceAction(
Actions.moveBy(10, 0, 0.5f),
Actions.moveBy(-10, 0, 0.5f))));
}
}
//In FadeOut we are trying to decorate Shake object with another Action
public static class FadeOut extends ButtonDecorator {
public FadeOut(Button buttonToBeDecorated) {
super(buttonToBeDecorated);
Array<Action> actions = buttonToBeDecorated.group.getActions(); //getting actions from Shake
group.addActor(buttonToBeDecorated);
/* I'm guessing that the whole workaround is in this line. We are adding
Shake-actor to FadeOut group so Shake-actions should no longer apply
to Shake-object and can be applied to our new FadeOut button */
group.addActor(this); //Adding FadeOut to it's own group
for (Action action : actions)
group.addAction(Actions.parallel(action,new SequenceAction(Actions.fadeOut(3), Actions.fadeIn(3))))
//besides adding shake actions to FadeOut object we are also adding parallel fadeout action
}
}
Я не знаю, почему, но все же только одно действие (затухание) применяется к созданному объекту