Godot开发太空射击游戏出现'invalid get index 'position'错误如何解决
报错原因
- 脚本中声明的
player变量从未被赋值,始终为Nil空值,当你调用_get_dir(player)时,传入的target参数为空,访问target.position自然触发了该报错。 - 额外隐藏问题:代码中使用的
offset变量也未定义,后续运行会触发新的报错。
修复方案
在_ready()函数中先通过场景树路径获取Player节点赋值给player变量,同时补充定义offset变量即可,修复后的完整代码如下:
extends StaticBody2D var dir = Vector2() var player var bullet = preload("res://scebes/EnemyBullet.tscn") # 补充定义子弹生成位置的偏移量,数值可以根据你的需求调整 var offset = 20.0 func _ready(): # 通过场景树路径获取Player节点赋值 player = get_parent().get_node("Player") _get_dir(player) func _get_dir(target): dir = (target.position - position).normalized() func _on_Timer_timeout(): _get_dir(player) var b = bullet.instance() get_parent().add_child(b) b.position = position + dir * offset b.dir = dir
验证
修改完成后运行项目,敌人就可以正常获取玩家的位置信息,朝玩家方向发射子弹了。
内容的提问来源于stack exchange,提问作者Pluto
相关产品推荐
相关产品推荐

