get_tree()。​​get_current_scene()在godot / gdscript

时间:2019-05-22 22:24:03

标签: game-engine godot gdscript

我试图使用get_tree().get_current_scene().get_name()来获取当前场景的名称,但出现错误:

  

试图在null的基础'null实例'中调用函数'get_name'   实例。

我发现get_current_scene()在给我null。这是在功能已按预期工作的更改场景之后。 即 menu.gd 中的get_tree().get_current_scene().get_name()返回 菜单 game.gd 中的get_tree().get_current_scene().get_name()返回 错误 ,因为get_tree().get_current_scene()null

levelManager.gd (自动加载的单例)[完整脚本]

extends Node

const SCENE_PATH = "res://scenes/"

func change_scene(scene_name):
    deffer_call("_deffered_change_scene", scene_name)

func _deffered_change_scene(scene_name):
    var path = SCENE_PATH + scene_name + ".tscn"
    var root = get_tree().get_root()
    var current = root.get_child(root.get_child_count() - 1)
    current.free()
    var scene_resource = ResourceLoader.load(path)
    var new_scene = scene_resource.instance()
    get_tree().get_root().add_child(new_scene)
    get_tree().set_current_scene(new_scene)

func _process(_delta):
    if Input.is_action_pressed("close"):
        get_tree().quit()

func deffer_call(func_name, func_param):
    call_deferred(func_name, func_param)

-[缩短的脚本:]-

menu.gd

extends Node

func _ready():
    var scene_name = get_tree().get_current_scene().get_name()
    print(scene_name) # returns 'menu'

# on full version of the script, mechanism that called _change_scene here

func _change_scene():
    levelManager.change_scene("game")

game.gd

extends Node

#game variables declared here

func _ready():
    var scene_name = get_tree().get_current_scene().get_name()
    print(scene_name) #returns an error due to get_tree().get_current_scene() being null

# rest of the game logic code here

我想知道为什么会这样。我从 levelManager.gd 更改场景的方式有问题吗?

我通过以下方式解决了此问题: 在 levelManager.gd 中设置var current_scene_name -在 menu.gd game.gd 中- 通过调用current_scene_name

重新设置self.get_name()

levelManager.gd

var current_scene_name

- menu.gd game.gd -

var scene_name = self.get_name()
levelManager.current_scene_name(scene_name)

^这显然是一种解决方法。它可以正常工作,但是我仍然想知道为什么在调用get_tree()之后却获得了不同的输出,而实际上它们却位于节点的同一远程位置。

屏幕截图 treeScreenshotBeforeAndAfterChangingScenes

0 个答案:

没有答案