Отразить горизонтально и вертикально отдельные кадры анимированного спрайта - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть 4 (0-3 кадра анимации) различных изображения анимации монеты с различными состояниями ее вращения. Я хотел бы, чтобы он выглядел как вращение, добавив еще 2 кадра (4-5), чтобы он выглядел так, как будто он вращается. В текущей ситуации это выглядит так, будто монета вращается на 180 градусов и возвращается в исходное положение. Я хотел бы перевернуть вертикально только 4-й и 5-й кадр. Как я могу добиться этого, не создавая новые избыточные PNG?

Я знаю, что создание 2-х новых png-файлов не является большой проблемой в этом случае, но если бы у меня было больше фреймов и / или больше спрайтов, это могло бы существенно повлиять на будущие проекты.

My current animation frames

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Я думал, что вы можете сделать анимацию перевернутой по горизонтали, когда она достигнет последней славы, однако это будет означать, что вам придется пропустить # 4 и # 5, чтобы избежать дублирования, но это все равно будет выглядеть странно, потому что кадр # 3 будет пропускать непосредственно к кадру № 0. Я пытался придумать разные порядки, в которые можно поместить спрайт-кадры, чтобы убрать это, но все мои решения либо приводят к дублированию кадров, либо к ужасным пропускам. Может быть, вы сможете решить то, что я не смог.

К сожалению, похоже, что хотя Godot поддерживает функцию play_backwards для узла animation_player, такой функции нет, когда дело доходит до animated_sprite. Жаль, потому что это, вероятно, решит вашу проблему.

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

Конечно, если я ошибаюсь, я бы приветствовал любые исправления со стороны сообщества.

Удачи.

0 голосов
/ 02 мая 2019

это один из способов выполнить задачу.

Внутри функции готовности записи Godot

#used to store frame value
var frame = 0

Внутри функции, которую вы используете, которая выполняет каждый кадр записи:

frame += 1

#resets the value representing the current frame
if frame > 5:
    frame = 0

if frame == 4 || frame == 5:
    #this should be whatever function you use to flip the sprite vetically
    flip_h = true 
else:
    #this should be whatever function you se to flip the sprite horizontally
    flip_h = false
...