You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 09:10:33