簡體   English   中英

在參考文獻 class 中 - Godot 中當前的 class 錯誤中未聲明方法“get_tree()”

[英]In Reference class - The method "get_tree()" isn't declared in the current class error in Godot

我目前正在處理我的游戲的保存和加載狀態,我創建了一個全局腳本來使用它。 該腳本擴展參考文獻 class 並使用 .dat 文件擴展名來保存和加載文件。 但是我不能在腳本中使用方法get_tree() 我收到錯誤消息: The method get_tree() isn't declared in the current class.

我認為問題是 Reference 沒有連接到 SceneTree。 所以我嘗試使用播放器實例並像這樣使用 get_tree() :

const PLAYER_CHARACTER = preload("res://Player/Player.tscn")

var player = PLAYER_CHARACTER.instance()

player.get_tree().change_scene("res://Map/" + player_data.scene)

但隨后我收到此錯誤: Attempt to call function 'change_scene' in base 'null_instance' on a null instance.

當我加載一個保存文件時,我對如何從這個腳本更改場景感到有點困惑。 我需要這個來完成我的保存和加載狀態。 代碼在這里:

extends Reference

get_tree().change_scene("res://Map/" + player_data.scene)

我很感激任何關於為什么會這樣的解釋,以及任何可以幫助我更好地理解這個問題的 godot 文檔。

get_tree方法存在於Node (和派生類)中。 請注意,場景樹中存在Node

但是Reference與場景樹沒有關系。

此外,新聞:您可以從代碼創建多個SceneTree s(這不是您需要為 99.99% 的游戲做的事情,但選項是存在的)。

因此,能夠獲取SceneTreeReference無關,如果是,也不清楚獲取哪一個


此代碼的問題:

const PLAYER_CHARACTER = preload("res://Player/Player.tscn")

var player = PLAYER_CHARACTER.instance()

player.get_tree().change_scene("res://Map/" + player_data.scene)

get_tree()給你null因為實例player不在SceneTree中。


現在,您可能想要默認的SceneTree 為此,有一個解決方法:

var scene_tree := Engine.get_main_loop() as SceneTree

SceneTree class 擴展了MainLoop class。默認情況下,Godot 的主循環使用SceneTree的一個實例。

因此,除非您將主循環的類型更改為其他內容,否則上面的代碼行將起作用。 同樣,你可以(可能不是你會為游戲做的事情,但對於一些實用程序來說它是有意義的 - 是的,將 Godot 用於非游戲軟件)。


話雖如此,我想鼓勵您尋找不同的設計。 為了改變當前場景,我們通常會使用Autoload (singleton) ,它在場景樹的任何地方都可用,而且它們在場景改變時仍然存在。

請記住,擴展Reference將使您的 class 引用計數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM