我正在尝试在Godot中制作波浪游戏,我尝试制作循环,但我无法让它们在函数外工作。但是当我把它放入函数Godot不会识别这个函数,并给我这个错误-错误(27,1):意外的token: identifier:spawnEnemies
代码:
extends Node2D
var screenSize = get_viewport().get_visible_rect().size
func _ready():
pass # Replace with function body.
var scene = preload("res://scenes/enemyInstance.tscn")
func _physics_process(delta):
pass
func spawnEnemy():
var instance = scene.instance()
var rng = RandomNumberGenerator.new()
var rndX = rng.randi_range(0, screenSize.x)
var rndY = rng.randi_range(0, screenSize.y)
instance.position.x = rndX
instance.position.y = rndY
add_child(instance)
func spawnEnemies(number):
for i in number:
spawnEnemy()
spawnEnemies(7)
我试过删除for循环或改变变量的方式,但没有任何作用。
GDScript不支持顶级语句
因此,这一行是无效的:
spawnEnemies(7)
这个错误,实际上是告诉你它没有期望在那里找到spawnEnemies
。与循环或变量无关
你想在什么时候执行呢?考虑到你的代码需要访问场景树(它使用add_child
),当对象刚刚初始化时(即在_init
中),它也必须在场景树中。我们有一个_enter_tree
的方法。
原来还有一个问题。如果有从编辑器定义的子节点,那么它们还没有被添加到_enter_tree
中。这可能导致Godot说节点很忙。该错误有这样的文本:"父节点忙于设置子节点,add_node()失败。考虑使用call_deferred("add_child", child)代替。
_ready
,除非你有不这样做的理由:
func _ready() -> void:
spawnEnemies(7)
您不能在脚本文件的顶层放置任意的代码块。GDScript不是Python。如果您打算在对象构建时运行该代码,请将其放入_init
(或_ready
,以便在节点进入场景树时运行)。如果你想让它在游戏启动时运行,那么把它放在自动加载的_ready
方法中。