#animation #godot
Вопрос:
В данный момент я не могу этого сделать, потому что система, которую я использую для обнаружения ввода, запускается один раз в каждом кадре, а это означает, что анимация будет продолжать циклически повторять каждый кадр. Я попытался сделать так, чтобы анимация запускалась только тогда, когда пробел удерживается нажатой, но она просто запускалась, а затем приостанавливалась, когда пробел не используется, а это не то, к чему я стремлюсь. Есть ли способ сделать так, чтобы при нажатии определенной клавиши анимированный спрайт запускал свою анимацию один раз, а затем останавливался? Спасибо за вашу помощь.
Комментарии:
1. Пожалуйста, отредактируйте вопрос, чтобы ограничить его конкретной проблемой с достаточной детализацией для определения адекватного ответа.
Ответ №1:
Сказать анимации, что в данный момент она играет, чтобы играть, — это нормально. Я считаю, что проблема в том, чтобы остановить это. Для этого я предлагаю использовать анимацию «простоя». Таким образом, вместо остановки текущей анимации вы можете указать ей воспроизвести анимацию «простоя» (которая может быть такой же простой, как один кадр).
Теперь, если вы не хотите указывать анимации воспроизводить каждый кадр, используйте Input.is_action_just_pressed
и Input.is_action_just_released
, и это подскажет вам, когда начинать и останавливать анимацию.
И если вы предпочитаете запускать код только при наличии некоторого события ввода, вы можете использовать _input
. См. также _process против _physics_process против *_input и Использование InputEvent.
Добавление: Я уделил мало внимания «только один раз». В редакторе SpriteFrames, где вы определяете анимацию, внизу есть переключатель, с помощью которого вы можете указать Годо, хотите ли вы, чтобы анимация повторялась или нет.
В странном случае, когда вы, возможно, захотите изменить это из кода, было бы что-то вроде этого $AnimatedSprite.frames.set_animation_loop("animation_name", false)
, чтобы анимация не зацикливалась (вам все равно нужно сказать Годо, чтобы воспроизвести ее, это изменит то, как она будет воспроизводиться с этого момента). Или вы можете false
заменить true
на, чтобы он снова зациклился.