戈多 - 意外令牌:标识符:"Function name"



我正在尝试在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方法中。

最新更新