Κοινή χρήση τεχνολογίας

[Godot3.3.3] - Κινούμενα σχέδια μετάβασης

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Μεταβατικό animationScreenTransitionAnimation

Δομή έργου

Προσθέστε μια σκηνή, ο ριζικός κόμβος είναι CanvasLayer2D και μετονομάστηκε σεScreenTransition:

εικόνα-20240712002547221

Προσθήκη θυγατρικού κόμβου ColorRect καιAnimationPlayer,υπάρχει ColorRect Αντιστράτηγος Χρώμα (Χρώμα) σε μαύρο:

εικόνα-20240712002657042

εμφανιζομαι Υλικό, νέος Shader(Αγνόησε το προς το παρόν)Shader Param ΜέσηςΣκουπίζω Εικόνα, θα προστεθεί αργότερα, εδώ είναι πώς θα μοιάζει αφού γίνει):

εικόνα-20240712002743876

Shader Code

υπάρχει Shader Πληκτρολογήστε τον κωδικό:

shader_type canvas_item;
// 申明 shader 的类型,因为是 2d 游戏,所以是 canvas_item 类型的

uniform sampler2D wipeImage;	// 全局变量 wipeImage
uniform float percent : hint_range(0, 1);	// 限制在 01 之间的百分比范围

void fragment() {
	float texVal = texture(wipeImage, UV).r;
	// 对图像的 r 通道进行采样
	
	if (texVal < percent) {
		// 在 Animation 中进行动态改变 percent 并且让 百分比不断变大,就可以有一个动态变透明的效果(虽然没有完全弄懂,但大致是这样没错的)
		COLOR.a = 0.0;
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

AnimationPlayer

Πρώτα προσθέστε ένα σενάριο για τον ριζικό κόμβο:

extends CanvasLayer

signal screen_covered

func emit_screen_covered():
	emit_signal("screen_covered")
    // 这个函数用来发送信号

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

στη συνέχεια ανοίξτε Αναπαραγωγή κινουμένων σχεδίων Προσθήκη σεΠροκαθορισμένο Κινουμένων σχεδίων:

στο πρώτο κομμάτι ColorRect > υλικό:σκίαση πρέπει να είναισκίαση Κάντε κλικ στο μικρό πλήκτρο στον επιθεωρητή για να προσθέσετε καρέ κινούμενων εικόνων.

εικόνα-20240712003234496

ScreenTransitionManager

Δημιουργήστε νέα σκηνή ScreenTransitionManager Και ορίστε το ως σκηνή που φορτώνεται αυτόματα στις ρυθμίσεις του έργου και προσθέστε ένα σενάριο στον ριζικό κόμβο:

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)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

μέθοδος κλήσης

στο έργοΑρχικο ΜΕΝΟΥΓια παράδειγμα, η διαδικασία κάνοντας κλικ στο μενού έναρξης για να καλέσετε τη συνάρτηση είναι η εξής:

func on_playButton_pressed():
	$"/root/LevelManager".change_level
  • 1
  • 2

αλλαγή_επιπέδου ΝαίLevelManagerλειτουργία στο, απλώς τροποποιήστε το ως εξής:

func change_level(levelIndex):
	currentLevelIndex = levelIndex
	if (currentLevelIndex >= levelScenes.size()):
		currentLevelIndex = 0
	$"/root/SceenTransitionManager".transition_to_scene(levelScenes[currentLevelIndex].resource_path)	// 获取路径并通过动画过渡脚本来延迟调用场景的切换,达到淡入淡出的效果
  • 1
  • 2
  • 3
  • 4
  • 5