Godot脚本问题:RigidBody2D小行星未按预期删除
问题
我正在制作一款小型太空射击游戏,将小行星设置为RigidBody2D。这些小行星会掉落至屏幕底部,本应被删除,但该功能出现问题。我添加了打印函数print("Object Terminated")来确认删除状态,运行时无报错,但小行星Y轴位置超过560时并未被删除。
我尝试将判断条件的">"改为"<",小行星因初始Y轴位置低于560而被立即删除,但原条件(Y轴高于560)却不生效。我怀疑get_position无法获取更新后的位置,请问该如何解决?
附上相关代码:
extends RigidBody2D func _ready(): var posY = get_position().y #gets y-axis position randomize() add_torque(rand_range(20,60)) if posY > 560: queue_free() print("Object Terminated") #checks that they are removed
解决方案
- 核心问题:
_ready()函数仅在节点初始化完成时执行一次,你在这里获取的posY是小行星刚生成时的初始位置,后续小行星移动过程中不会再触发这段判断逻辑,所以当它掉落至Y=560以下时,没有代码检测该状态。 - 修改方案:将位置检测逻辑移至
_physics_process(delta)函数中(RigidBody2D属于物理节点,该函数会与物理引擎同步更新,能确保获取到最新的物理位置),让每帧都检查小行星的位置:
修改后的代码:
extends RigidBody2D func _ready(): randomize() add_torque(rand_range(20,60)) func _physics_process(delta): var posY = get_position().y if posY > 560: queue_free() print("Object Terminated")
- 补充说明:
_physics_process的调用频率与物理引擎帧率一致,适合处理刚体运动相关的检测逻辑,能避免位置检测滞后的问题。
内容的提问来源于stack exchange,提问作者Luke Redwine
相关产品推荐
相关产品推荐

