Godot报错:Unexpected token: Identifier:spawnEnemies 求助
问题解决:Godot中函数调用的语法错误及初始化问题
你碰到的Unexpected token: Identifier:spawnEnemies错误,核心原因是GDScript不允许在全局作用域直接调用函数,函数调用必须放在其他函数内部执行。结合你的代码,还有几个初始化细节需要调整,具体修正方案如下:
关键修正点
将函数调用移入生命周期函数
把spawnEnemies(7)移到_ready()函数中,_ready()是节点加载就绪后自动执行的函数,适合处理初始化类的操作,比如生成敌人波次。修正视口尺寸的初始化时机
全局变量初始化阶段,节点还未加入场景树,直接调用get_viewport()会返回null,导致screenSize赋值失败。需要把screenSize的赋值逻辑放到_ready()里。优化随机数生成器(可选但推荐)
每次生成敌人都新建RandomNumberGenerator没必要,把它作为节点变量初始化,重复使用能提升性能。
修正后的完整代码
extends Node2D var screenSize: Vector2 var scene = preload("res://scenes/enemyInstance.tscn") var rng = RandomNumberGenerator.new() func _ready(): screenSize = get_viewport().get_visible_rect().size spawnEnemies(7) # 函数调用移至此处 func _physics_process(delta): pass func spawnEnemy(): var instance = scene.instance() var rndX = rng.randi_range(0, screenSize.x) var rndY = rng.randi_range(0, screenSize.y) instance.position = Vector2(rndX, rndY) # 直接赋值Vector2更简洁 add_child(instance) func spawnEnemies(number): for i in number: spawnEnemy()
补充说明
- GDScript的全局作用域仅支持定义变量、常量或类,不能直接执行函数调用语句,这是语法规则要求。
- 把
screenSize放在_ready()中初始化,能确保节点已连接到场景树,正确获取视口尺寸。 - 复用
rng变量,避免重复创建对象,减少不必要的性能开销。
内容的提问来源于stack exchange,提问作者dvyDvine
相关产品推荐
相关产品推荐

