[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Godot Engine » GDScript » Отражение нод. (Проблема с анимациями.)
Отражение нод.
zeka10000z1Дата: Ср, 30.05.2018, 11:20 | Сообщение # 1
Рядовой
Группа: Пользователи
Сообщений: 7
Награды: 0
Репутация: 0
Статус: Оффлайн
Вся проблема заключается в развороте персонажей.
Все же знают, что в файтингах оппоненты (или бойцы) всегда смотрят друг на друга.
И если перепрыгнет один из них, второй должен повернуться.
Но у меня проблема в том, что персонаж хоть и поворачивается, но без анимации.

Благо я разобрался, что можно не переделывать анимации, чтоб подходило под оба разворота, а достаточно сделать ``scale = -1``



Код определения положения для поворота:
Код
on_area = [get_node('../').get_children()[2], get_node('../').get_children()[3]]
if on_area[0].position.x > on_area[1].position.x:
  if on_area[1].scale.x == -1 && on_area[1] != null: on_area[1].call('look_right');
  if on_area[0].scale.x == 1 && on_area[0] != null: on_area[0].call('look_left');
  
else:
  if on_area[0].scale.x == -1 && on_area[0] != null: on_area[0].call('look_right');
  if on_area[1].scale.x == 1 && on_area[1] != null: on_area[1].call('look_left');

Исполнение поворота:

Код
func look_left():
if scale.x == 1 and in_air != true:
  scale.x = -1  
  $spr/anim.play('Turn')
  need_to_turn = true
  flipped_h = true
func look_right():
if scale.x == -1 and in_air != true:
  scale.x = 1
  $spr/anim.play('Turn')
  need_to_turn = true
  flipped_h = false


Сообщение отредактировал zeka10000z1 - Ср, 30.05.2018, 11:23
 
p314Дата: Чт, 31.05.2018, 10:35 | Сообщение # 2
Рядовой
Группа: Пользователи
Сообщений: 6
Награды: 0
Репутация: 0
Статус: Оффлайн
Я видел люди поворачивают спрайт так:

Код
if (new_siding_left!=siding_left):
   if (new_siding_left):
      get_node("sprite").set_scale( Vector2(-1,1) )
   else:
      get_node("sprite").set_scale( Vector2(1,1) )


Пример здесь:
https://habr.com/post/212583/
https://habr.com/post/212837

Исходник в конце второй статьи. И кот разворачивается, и анимацыи не пропадают!

ЗЫ:   flipped_h - это чо? Я знаю есть свойство у Sprite  --  flip_h . Оно как раз и поворачивает спрайт http://docs.godotengine.org/en/3.0/classes/class_sprite.html
Но вроде оно тебе не нужно, тк ты используешь scale.


Сообщение отредактировал p314 - Чт, 31.05.2018, 10:40
 
zeka10000z1Дата: Пт, 01.06.2018, 10:45 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 7
Награды: 0
Репутация: 0
Статус: Оффлайн
Цитата p314 ()
Я видел люди поворачивают спрайт так:Кодif (new_siding_left!=siding_left): if (new_siding_left): get_node("sprite").set_scale( Vector2(-1,1) ) else: get_node("sprite").set_scale( Vector2(1,1) )
 Это я уже понял, проблема в том что повернулся не проиграв анимацию 1 раз.
Цитата p314 ()
ЗЫ: flipped_h - это чо?
это new_siding_left из твоего примера.

Цитата p314 ()
Пример здесь:https://habr.com/post/212583/https://habr.com/post/212837Исходник в конце второй статьи. И кот разворачивается, и анимацыи не пропадают!

Зато все сцены пропали и остались лишь текстуры и 2 скрипта.

Добавлено (01.06.2018, 10:45)
---------------------------------------------

В идеале

В действительности

На всякий, чтобы поняли о чем я.


Сообщение отредактировал zeka10000z1 - Пт, 01.06.2018, 10:50
 
p314Дата: Пт, 08.06.2018, 09:37 | Сообщение # 4
Рядовой
Группа: Пользователи
Сообщений: 6
Награды: 0
Репутация: 0
Статус: Оффлайн
По видео создается впечатление, что анимация Turn успевает сыграть только один кадр после чего  сразу же исполняется другая анимация. То что ты запустил ее (Turn) на исполнение еще не значит, что она доиграет до конца. В этом можно убедится закоментировав(отключив) другие анимации.
Код
scale.x = -1
Это тоже не есть гуд. Сначала ты должен убедится что анимация доиграла до конца.
Цитата
Зато все сцены пропали и остались лишь текстуры и 2 скрипта.
Это, как я понимаю, уже следущая проблема, никак не связанная с первоначальной. Я даже не могу представить отчего такой казус. scale тут совершенно ни причем. В голову приходят всякие идиотские варианты типа: все анимации, повешенные на одну ноду. Пока не догадываюсь...
 
zeka10000z1Дата: Вт, 12.06.2018, 11:24 | Сообщение # 5
Рядовой
Группа: Пользователи
Сообщений: 7
Награды: 0
Репутация: 0
Статус: Оффлайн
Цитата p314 ()
Это, как я понимаю, уже следущая проблема, никак не связанная с первоначальной. Я даже не могу представить отчего такой казус. scale тут совершенно ни причем. В голову приходят всякие идиотские варианты типа: все анимации, повешенные на одну ноду. Пока не догадываюсь...
Это я говорил насчет твоего примера. В нем нет сцен чтобы проверить работоспособность.
 
Форум » Godot Engine » GDScript » Отражение нод. (Проблема с анимациями.)
  • Страница 1 из 1
  • 1
Поиск: