Как сделать так, чтобы скорость анимации некоторых треков скелетной анимации была основана на скорости?

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


Для справки вот персонаж и элементы, которые я хочу объединить:

Анимация тела при ходьбе - должна анимироваться медленнее в зависимости от скорости

Анимация меча-руки для ходьбы - скорость анимации должна равняться телу

Мигает - не зависит от скорости

Мигает - не зависит от скорости


Прежде чем я изменил скелет для разделения анимации руки-меча, я создал этот код, который работал нормально, но, похоже, не позволяет смешивать анимации или помещать их в треки.

Под Шагом:

if jumping = false
    if speed != 0
       {
       anim = "Walk"
       frame += speed/8
       }
    else
       {
       anim = "Stand"
       frame += 1
       }

Под ничьей:

draw_skeleton(spr_player, anim, "", frame, x, y - z, -facing, image_yscale, image_angle, image_blend, image_alpha)

tl; dr Мне нужно, чтобы эти анимации были на дорожках, и в то же время анимация ходьбы могла бы двигаться в зависимости от скорости.

1 ответ

Вы можете присвоить разные image_speed каждому из различных объектов и использовать эти объекты image_index, чтобы увидеть, в каком кадре его анимации он находится в данный момент. Функция image_speed() принимает десятичное число от 0 до 1, где 0 означает, что кадр изображения не изменяется, а 1 означает, что кадр изображения изменяется на каждом шаге. Я обычно использую 0,2. Вы можете рассчитать скорость изображения тела и руки, умножив, насколько далеко джойстик влево или вправо (как десятичное число), на скорость изображения, которую вы хотите, когда он полностью направлен влево или вправо. Скорость изображения глаз не должна меняться. image_index() возвращает индекс текущего кадра анимации. Когда вы используете свой скрипт draw_skeleton, передайте objectname.Image_Index, чтобы получить текущий индекс спрайта. Надеюсь, это работает:)

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