Как сделать так, чтобы скорость анимации некоторых треков скелетной анимации была основана на скорости?
У меня есть персонаж, который движется в зависимости от того, насколько сильно нажата аналоговая ручка контроллера. Я хочу, чтобы анимация ходьбы персонажа была быстрее или медленнее, в зависимости от скорости, с которой игрок ходит.
Для справки вот персонаж и элементы, которые я хочу объединить:
Анимация тела при ходьбе - должна анимироваться медленнее в зависимости от скорости
Анимация меча-руки для ходьбы - скорость анимации должна равняться телу
Мигает - не зависит от скорости
Прежде чем я изменил скелет для разделения анимации руки-меча, я создал этот код, который работал нормально, но, похоже, не позволяет смешивать анимации или помещать их в треки.
Под Шагом:
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, чтобы получить текущий индекс спрайта. Надеюсь, это работает:)