GDScript:UIFramework V1.0

比较简单粗暴的方法,没有缓存,即用即加载。先把 UI的tscn 都放到一个文件夹中,也可以指定子文件夹

extends Node

signal ui_opened(ui_name)

export(String, DIR) var ui_dir:String

func open(ui_name:String,msg:Dictionary = {},sub_dir:String= "/",suffix:String = ".tscn")->void:
	var ui:Node = null
	if has_node(ui_name) : 
		ui = get_node(ui_name)
	else:
		var scn  := load(ui_dir + sub_dir + ui_name + suffix) as PackedScene
		if scn != null and scn.can_instance():
			ui = scn.instance() as Node
			add_child(ui)
	if ui != null:
		move_child(ui,get_child_count() - 1)
		ui.name = ui_name
		if ui.has_method("open"):
			ui.open(msg)
		emit_signal("ui_opened",ui_name)
	else:
		Logger.error("Failed to open UI:" + ui_name)
	
func close(ui_name:String)->void:
	if has_node(ui_name):
		var ui := get_node(ui_name)
		remove_child(ui)
		ui.queue_free()

func close_all()->void: 
	for ui in get_children():
		remove_child(ui)
		ui.queue_free()


发布了272 篇原创文章 · 获赞 134 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/hello_tute/article/details/104036298