【问题标题】:Area2D Not Triggering Object in GodotArea2D 没有在 Godot 中触发对象
【发布时间】:2022-08-03 13:44:15
【问题描述】:

这是我的代码:(只是让你知道我是一个初学者,我这周才开始,虽然我确实有其他语言和游戏引擎的知识)

func _on_Area2D_area_entered(area):
    get_parent().get_node(\"Level 1/Area2D/Flag\").rotation_degrees += 1

我试图完成的是玩家游戏对象会查看它是否在旗帜区域,如果是,旗帜会旋转。

我不确定问题出在哪里。我认为它可能在第二行。如果设置错误,我在下面提供了屏幕截图。我查看了针对同一主题提出的其他相关问题,但他们没有回答我的问题。

“玩家”游戏对象是带有包含检测的脚本的对象,如果它在 area2D 中。

    标签: godot


    【解决方案1】:

    如果要检查 Area2D 在运行时是否正确定位,请启用 Debug -> Visible Collision Shapes。

    如果要检查_on_Area2D_area_entered 是否正在运行,请添加断点(或使用打印)。


    你收到错误了吗?

    如果那里没有Node,则此表达式将在运行时导致错误:

    get_parent().get_node("Level 1/Area2D/Flag")
    

    如果您希望能够检查,可以使用get_node_or_nullis_instance_valid

    由于您没有提到任何错误,我猜该方法没有运行。


    如果该方法没有运行,最可能的罪魁祸首是 - 我猜是给定方法的名称 - 你连接了 "area_entered" 信号但打算连接 "body_entered" 信号。

    当另一个Area2D 进入Area2D 时,"area_entered" 信号将触发。但我在你的场景树中只看到一个Area2D。另一方面,"body_entered" 将在PhysicsBody2D(例如StaticBody2DKinematicBody2DRigidBody2D)进入Area2D 时触发。无论哪种情况,您都会得到作为方法参数输入的内容。

    Area2D 可能无法检测到您想要的内容的其他原因包括没有 collision_layercollision_maskmonitoring 的交集被禁用。


    并消除几个可能的误解:

    • "area_entered""body_entered"Area2DPhysicsBody2D 分别进入Area2D 时触发,而不是它们所在的每一帧。所以rotation_degrees += 1 不是旋转动画。
    • 您将收到任何触发信号的通知,而不仅仅是您连接的对象。您可能需要进一步过滤,例如if body == self:

    对于通过搜索到达这里的人,我想链接一个类似的案例:Enemy is not affected by bullets。还有我的full explanation of how to set up physic nodes

    【讨论】:

    • 你是对的。我发现我的播放器上没有 area2d,所以我将其更改为 body。感谢您的解决方案。
    • 另外,我可以很容易地激活一个 bool,当它被激活时,它会在一个 delta func 中运行一个循环
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2016-09-19
    • 2015-08-18
    • 1970-01-01
    • 2020-05-04
    相关资源
    最近更新 更多