您当前的位置: 首页 > 

开发游戏的老王

暂无认证

  • 2浏览

    0关注

    803博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Godot Engine:组(Group)和场景树(Tree)的几个要点

开发游戏的老王 发布时间:2020-01-04 16:27:39 ,浏览量:2

1. 组是由场景树维护的

这一点从获取组成员时要先获取场景树就可以看出

get_tree().get_nodes_in_group("group_name")
2. 节点离开场景树时会被移除所在组

我在场景添加了一个Node,并把它放到“UI”组中,然后反复将它从场景树中添加/移除

extends Node
func _ready():
	add_to_group("UI")
	print("ready!!!!")

func _enter_tree():
	print("entered tree")

func _exit_tree():
	print("exited tree")

func _process(delta):
	if Input.is_action_just_pressed("ui_left"):
		print("i am running!!!!!!!!!!!!!!!!!!!!!!")

在一个Manager中控制节点

var is_child = false

func _process(delta):
   if Input.is_action_just_pressed("ui_page_up"):
   	if is_child:
   		remove_child(node)
   		is_child = false
   	else:
   		add_child(node)
   		is_child = true
   
   if Input.is_action_just_pressed("ui_run"):
   	var list :=get_tree().get_nodes_in_group("UI")
   	print("Nodes in UI group:" + str(list.size()))
   	

添加到场景

entered tree
ready!!!!
Nodes in UI group:1

从场景移除

exited tree
Nodes in UI group:0

再次添加到场景

entered tree
Nodes in UI group:1

从上面的代码和结果可以看出:

  1. 节点从场景树remove_child以后会被移除所在组,所以没有必要在_exit_tree中手动remove_from_group
  2. 再次将节点add_child以后以后会被再次添加到组,所以没有必要在_enter_tree中手动add_to_group
  3. 顺便再次验证了《Node类:生命周期》,_ready_enter_tree之后调用,并且只调用一次,而_enter_tree每次加入场景树都会调用
关注
打赏
1656935939
查看更多评论
立即登录/注册

微信扫码登录

0.0427s