2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Fügen Sie eine Szene hinzu, der Wurzelknoten ist CanvasLayer2D
und umbenannt inBildschirmübergang:
Untergeordneten Knoten hinzufügen FarbeRechteck UndAnimationPlayer,existieren FarbeRechteck Generalleutnant Farbe (Farbe) auf Schwarz setzen:
auftauchen Material, neu Shader(Ignorieren Sie es vorerst)Shader Parameter MitteWischen Bild, wird später hinzugefügt, so wird es aussehen, wenn es fertig ist):
existieren Shader Geben Sie den Code ein:
shader_type canvas_item;
// 申明 shader 的类型,因为是 2d 游戏,所以是 canvas_item 类型的
uniform sampler2D wipeImage; // 全局变量 wipeImage
uniform float percent : hint_range(0, 1); // 限制在 0 和 1 之间的百分比范围
void fragment() {
float texVal = texture(wipeImage, UV).r;
// 对图像的 r 通道进行采样
if (texVal < percent) {
// 在 Animation 中进行动态改变 percent 并且让 百分比不断变大,就可以有一个动态变透明的效果(虽然没有完全弄懂,但大致是这样没错的)
COLOR.a = 0.0;
}
}
Fügen Sie zunächst ein Skript für den Wurzelknoten hinzu:
extends CanvasLayer
signal screen_covered
func emit_screen_covered():
emit_signal("screen_covered")
// 这个函数用来发送信号
dann öffnen Animations-Player Hinzufügen zuStandard Animation:
im ersten Track FarbeRechteck > Material:Shader muss seinShader Klicken Sie im Inspektor auf die kleine Taste, um Animationsbilder hinzuzufügen.
Neue Szene erstellen Bildschirmübergangsmanager Legen Sie es in den Projekteinstellungen als automatisch geladene Szene fest und fügen Sie dem Stammknoten ein Skript hinzu:
extends Node
var screenTransitionScene = preload("res://scenes/UI/ScreenTransition.tscn")
func transition_to_scene(scenePath):
var screenTransition = screenTransitionScene.instance()
add_child(screenTransition)
yield(screenTransition, "screen_covered")
get_tree().change_scene(scenePath)
im ProjektStartmenüDer Vorgang zum Klicken auf das Startmenü zum Aufrufen der Funktion ist beispielsweise wie folgt:
func on_playButton_pressed():
$"/root/LevelManager".change_level
Änderungsebene JaEbenenManagerFunktion in , ändern Sie sie einfach wie folgt:
func change_level(levelIndex):
currentLevelIndex = levelIndex
if (currentLevelIndex >= levelScenes.size()):
currentLevelIndex = 0
$"/root/SceenTransitionManager".transition_to_scene(levelScenes[currentLevelIndex].resource_path) // 获取路径并通过动画过渡脚本来延迟调用场景的切换,达到淡入淡出的效果