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

Godot技术问题:实例化场景丢失分组信息导致计分异常

问题分析与解决方案

最可能的核心问题是:碰撞检测到的body是Circle场景里的RigidBody子节点,而非Circle根节点。你在set_color里是给Circle根节点调用add_to_group,但RigidBody作为子节点并没有加入对应分组,所以碰撞触发时,用RigidBody去检测分组自然会失败。

解决方案1:给RigidBody添加分组

修改Circle的set_color函数,把分组加到碰撞的主体RigidBody上:

extends Obj

func set_color(color):
    match color:
        COLORS_CONST.COLORS_DICT.red.name: 
            $RigidBody/Shape.color = COLORS_CONST.COLORS_DICT.red.value
            $RigidBody.add_to_group(COLORS_CONST.COLOR_GROUPS.hot)
        COLORS_CONST.COLORS_DICT.green.name: 
            $RigidBody/Shape.color = COLORS_CONST.COLORS_DICT.green.value
            $RigidBody.add_to_group(COLORS_CONST.COLOR_GROUPS.cold)

解决方案2:碰撞时获取Circle根节点判断分组

如果不想调整分组添加位置,就在ScoreCount的检测函数里,获取body的父节点(Circle根节点)来判断分组:

signal left_count
signal right_count

func on_ScoreCount_body_entered(body):
    # 若RigidBody是Circle的直接子节点,用get_parent()获取根节点
    var circle = body.get_parent()
    print(circle.is_in_group(COLORS_CONST.COLOR_GROUPS.hot))
    if circle.is_in_group(COLORS_CONST.COLOR_GROUPS.hot):
        emit_signal('left_count')

注意:这里把信号名修正为Godot标准的body_entered,你之前写的bodyEnter是拼写错误,会导致信号无法正确触发,记得同步检查信号连接的正确性。

额外检查点

  • 确认COLORS_CONST.COLOR_GROUPS.hot在两个脚本中引用的是同一个常量值,避免因常量定义不一致导致分组判断失败。
  • 检查Circle实例是否在add_child后完成节点树初始化(不过Main里能打印正确结果,这个可能性较低)。

内容的提问来源于stack exchange,提问作者quang huy nguyen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:22:52