Вопрос по java, libgdx – По крайней мере, если вы не измените позицию актера каким-либо другим способом, пока действие удалено, этот подход должен работать как ожидалось.

0

бую Libgdx. Это то, чего я пытаюсь достичь,

Определите действие для актера, пока актер выполняет действие, при нажатии кнопки мы сможем запустить и остановить действие из одной и той же позиции.

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

Можете ли вы помочь? я что-то упустил?

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

Ваш Ответ

1   ответ
1

Попробуйте удалить действие из актера по клику прямо изActor#actions массив, а затем добавьте его снова на другой клик. Пример:

final Actor actor = // ... initialize your actor;
final Action action = Actions.forever(Actions.rotateBy(360f, 3f, Interpolation.bounceOut));
actor.addAction(action);

actor.addListener(new ClickListener() {
    @Override
    public void clicked(InputEvent event, float x, float y) {
        Array<Action> actions = actor.getActions();
        if (actions.contains(action, true)) {
            // removing an action with Actor#removeAction(Action) method will reset the action,
            // we don't want that, so we delete it directly from the actions array
            actions.removeValue(action, true);
        } else {
            actor.addAction(action);
        }

    }
});
По крайней мере, если вы не измените позицию актера каким-либо другим способом, пока действие удалено, этот подход должен работать как ожидалось. Arctic45
Я пробовал это, но это не работает в моем случае, это может работать в вашем случае, потому что вращение является идемпотентной операцией, т.е. вы можете начать с того места, где остановились, и оно будет выглядеть одинаково, но в случае перехода от a к b если вы удалите действие в некоторой точке x (между a и b), теперь, если вы повторно примените действие, оно может не сработать, есть мысли? не могли бы вы попробоватьSequenceAction(Action.moveTo(100,100,10), Action.moveTo(500,500,10)) hello123
Ты имеешь ввидуActions.sequence( Actions.moveTo(100,100,10), Actions.moveTo(500,500,10)) ? Во всяком случае, я попробовал, отлично работает. Вы пробовали так же, как в моем примере? Как я уже отметил, важно НЕ использоватьactor.removeAction(), потому что это позвонитaction.reset(), Способ в примере избегает этого, и действие возобновляется в том же состоянии, не имеет значения, является ли операция идемпотентной или нет. Arctic45
Нет, оно возобновится точно из состояния, в котором оно было приостановлено. Нет необходимости делать дополнительную математику. Arctic45
Задача с продолжительностью. Нужно ли нам снова вычислять его в зависимости от оставшегося пути? А также как определить оставшийся путь. hello123

Похожие вопросы