Как временно снять действия с актера и назначить их обратно

Я разрабатываю свой собственный класс clickListener. Когда я нажимаю на любого актера, зарегистрированного в моем кликлистере, я хотел бы приостановить все действия с актером и вызывать его только тогда, когда срабатывает касание. Я пытался использовать следующие коды, но это приводило к полному зависанию каждый раз, когда я запускал touchUp.

public class MyClickListener extends ClickListener {

    public Actor actor;
    Array<Action> cachedActions;

    @Override
    public void touchUp(InputEvent event, float x, float y, int pointer, int button) {
        super.touchUp(event, x, y, pointer, button);
        actor = event.getListenerActor();
        actor.addAction(btnScaleBackActions());
        for(Action a: cachedActions)
        {
            a.reset();
            a.setTarget(actor); 
            a.setActor(actor);
            actor.addAction(a); //this line give me a total hang
        }
    }

    @Override
    public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
        if (pointer==0) // avoid further trigger on other buttons while holding the selected actor
        {
            actor = event.getListenerActor();
            actor.setScale(0.9f);
            cachedActions = actor.getActions();
            actor.clearActions();
            if (autoSetSound)AudioManager.playSound(AudioManager.CLICK_IN);
            return super.touchDown(event, x, y, pointer, button);
        }
        else
        {
            return false;
        }
    }

    public static Action btnScaleBackActions(){
        float time = 0.1f;
        return sequence(
                scaleTo(1,1,time ),
                scaleTo(0.95f,0.95f,time/4),
                scaleTo(1,1,time/4)
        );
    }
}

Ошибок не показывает, а только белый экран. Любая помощь?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
31
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в этой строке:

cachedActions = actor.getActions();

Вы получаете ссылку на собственный список действий Актера вместо того, чтобы делать копию. Кстати, в следующей строке (actor.clearActions();) вы очищаете список, поэтому cachedActions пусто.

Позже, после подкраски, у актера (и cachedActions) теперь есть действие, которое вы добавили (btnScaleBackActions()). Вы перебираете массив, постоянно добавляя к нему один и тот же объект. Итератор никогда не может завершиться, потому что вы всегда добавляете больше, так что это бесконечный цикл.

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

private final Array<Action> cachedActions = new Array<Action>();

Затем скопируйте действия, а не ссылку в тачдаун:

cachedActions.addAll(actor.getActions());
actor.clearActions();

И не забудьте убрать cachedActions в конце touchUp.

Большое спасибо!! Но теперь я получаю нулевое исключение в RepeatAction.delegate и DelegateAction.act при срабатывании touchUp. Не уверен, что это связано с добавление нулевых действий для повторения. Могу ли я узнать, как в этом случае обрабатывать повторяющиеся/навсегда действия?

Pengyou 31.05.2019 05:20

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

Tenfour04 31.05.2019 06:32

Пожалуйста, взгляните на мой новый вопрос

Pengyou 31.05.2019 09:05

Другие вопросы по теме