Итак, проблема заключалась в Play
методе на AnimationPlayer
объекте вроде , работающем как asyn c (не знаю, правильный ли это термин для него).
К счастью, В Godot есть функция, называемая сигналов . На объектах AnimationPlayer
имеются сигналы animation_started
и animation_finished
. По сути, я создал сценарий C# для сцены Фейдера, подключил сигналы от player
до fader
, например:
animation_started
до _FaderAnimationStart
animation_finished
до _FaderAnimationEnd
В конце мой скрипт выглядит следующим образом:
using Godot;
using System;
public class Fader : Control
{
private ColorRect rect;
private AnimationPlayer player;
public override void _Ready()
{
GD.Print("Initializing Fader...");
rect = (ColorRect)GetNode("rect");
player = (AnimationPlayer)GetNode("player");
SetSize(OS.WindowSize);
rect.SetSize(OS.WindowSize);
Visible = false;
}
private void _FaderAnimationStart(String anim_name)
{
Visible = true;
}
private void _FaderAnimationEnd(String anim_name)
{
Visible = false;
}
}
Я решил это благодаря njamster ответ и Ханс Пассант комментарий .
Однако это решает только половину проблемы. Да, сцена теперь исчезает при загрузке, но не исчезает. Учитывая, что он выполняет своего рода asyn c (опять же, я не уверен, что это правильный термин), изменение прерываний сцены во время запуска анимации. Я также обновлю ответ, когда решу эту проблему.
Обновление
Что ж, я не могу решить проблему с затуханием, потому что она требует доступа к родительскому узлу из инициализированной детской сцены. Есть несколько методов, о которых я могу подумать.
Первый - это каким-то образом параметризовать сцену "Fader". Это можно сделать разными способами, но в конце, когда вы инициализируете его из другой сцены, вам нужно привести его к Fader
, и я не знаю, является ли это верным способом сделать это. Другой проблемой является стандартизация этого в кодовой базе. Подобный метод обсуждается в здесь .
Второй способ - написать его в виде плагина , который имеет свои преимущества и недостатки. C# в этой конкретной области не испытан в бою.
Третий - использование системы управления государством. Вот реализация redux для Godot. И вам нужно каким-то образом интегрировать его для сигналов, что кажется хлопотным.
Итак, в общем, я до сих пор не знаю, как исчезнуть.