为什么我不能重新分配这个基本变量值(GODOT 游戏引擎)
Why am I not able to reassign this basic variables value (GODOT game engine)
我在自动加载中有一个名为“var Current_Scene”的简单变量,它没有赋值(这意味着它自动为 null。
在我的游戏中,当您单击一个按钮时,“Current_Scene”的值应该更改为名为“Main Street”的字符串。当我检查值是否在调试中更改时,它说“Current_Scenes”值仍然为空。即使当我通过将 "Current_Scenes" 值预设为字符串 "cat" 进行实验时,在我尝试将其更改为 "Main Street" 之后,调试仍然说它是 STILL cat。不知道我错过了什么?
下面是我的代码,用于检查我的值是否已正确重新分配:(在场景 2 内)
func _ready():
if SceneChange.Current_Scene != "Main Street":
print(SceneChange.Current_Scene)
下面是我在自动加载中设置变量的代码:(在自动加载中)
var Current_Scene
下面是我要更改变量值的按钮的代码:(在不同的场景 1 中)
func _on_Button_pressed():
#starts world clock when start button is clicked
WorldClock._WorldTimerStart()
SceneChange.RemoveScene()
SceneChange.enter_main_street()
SceneChange.Current_Scene = "Main Street"
感谢您的帮助!
我没有你的场景加载代码(RemoveScene
+enter_main_scene
实现),所以我就用了get_tree().change_scene(...
。我无法以这种方式重现该问题,所以它可能在您的场景 loading/changing 代码中。请提供您对这些方法的实现以进一步阐述或尝试将其更改为 get_tree().change_scene()
并查看问题是否已解决。
我的假设是我们的案例之间的区别在于您的实现在执行 SceneChange.Current_Scene = "Main Street"
行之前在第二个场景调用 _ready()
回调。如果我使用 get_parent().add_child(secondScene.instance())
而不是 get_tree().change_scene()
,那对我来说就是这种情况。要解决此问题,请交换执行字符串分配的代码行并将打包的第二个场景添加为当前场景的子节点。
我的实现:
# Autoload named 'Global'
extends Node
var global_string = "cat"
# Script attached to the root node of "MainStreet.tscn"
extends Node2D
func _ready():
if Global.global_string != "Main Street":
print(Global.global_string)
# Script attached to the button on the first scene:
extends Button
func _on_Button_pressed():
get_tree().change_scene("res://MainStreet.tscn")
Global.global_string = "Main Street"
修复第二个场景添加 add_child
:
var secondScene = load("res://MainStreet.tscn")
func _on_Button_pressed():
Global.global_string = "Main Street" # should go first
get_parent().add_child(secondScene.instance()) # calls _ready() on second scene
正如 this Godot tutorial 所建议的那样,您还可以使用 call_deffered("your_method_that_changes_scene")
推迟场景切换。
我的 Godot 版本是 3.2.3
。
我在自动加载中有一个名为“var Current_Scene”的简单变量,它没有赋值(这意味着它自动为 null。
在我的游戏中,当您单击一个按钮时,“Current_Scene”的值应该更改为名为“Main Street”的字符串。当我检查值是否在调试中更改时,它说“Current_Scenes”值仍然为空。即使当我通过将 "Current_Scenes" 值预设为字符串 "cat" 进行实验时,在我尝试将其更改为 "Main Street" 之后,调试仍然说它是 STILL cat。不知道我错过了什么?
下面是我的代码,用于检查我的值是否已正确重新分配:(在场景 2 内)
func _ready():
if SceneChange.Current_Scene != "Main Street":
print(SceneChange.Current_Scene)
下面是我在自动加载中设置变量的代码:(在自动加载中)
var Current_Scene
下面是我要更改变量值的按钮的代码:(在不同的场景 1 中)
func _on_Button_pressed():
#starts world clock when start button is clicked
WorldClock._WorldTimerStart()
SceneChange.RemoveScene()
SceneChange.enter_main_street()
SceneChange.Current_Scene = "Main Street"
感谢您的帮助!
我没有你的场景加载代码(RemoveScene
+enter_main_scene
实现),所以我就用了get_tree().change_scene(...
。我无法以这种方式重现该问题,所以它可能在您的场景 loading/changing 代码中。请提供您对这些方法的实现以进一步阐述或尝试将其更改为 get_tree().change_scene()
并查看问题是否已解决。
我的假设是我们的案例之间的区别在于您的实现在执行 SceneChange.Current_Scene = "Main Street"
行之前在第二个场景调用 _ready()
回调。如果我使用 get_parent().add_child(secondScene.instance())
而不是 get_tree().change_scene()
,那对我来说就是这种情况。要解决此问题,请交换执行字符串分配的代码行并将打包的第二个场景添加为当前场景的子节点。
我的实现:
# Autoload named 'Global'
extends Node
var global_string = "cat"
# Script attached to the root node of "MainStreet.tscn"
extends Node2D
func _ready():
if Global.global_string != "Main Street":
print(Global.global_string)
# Script attached to the button on the first scene:
extends Button
func _on_Button_pressed():
get_tree().change_scene("res://MainStreet.tscn")
Global.global_string = "Main Street"
修复第二个场景添加 add_child
:
var secondScene = load("res://MainStreet.tscn")
func _on_Button_pressed():
Global.global_string = "Main Street" # should go first
get_parent().add_child(secondScene.instance()) # calls _ready() on second scene
正如 this Godot tutorial 所建议的那样,您还可以使用 call_deffered("your_method_that_changes_scene")
推迟场景切换。
我的 Godot 版本是 3.2.3
。