[英]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% 的游戲做的事情,但選項是存在的)。
因此,能夠獲取SceneTree
與Reference
無關,如果是,也不清楚獲取哪一個。
此代碼的問題:
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.