Area2D 不触发 Godot 中的对象
Area2D Not Triggering Object in Godot
这是我的代码:(只是让你知道我是一个初学者,我这周才开始,尽管我确实了解其他语言和游戏引擎)
func _on_Area2D_area_entered(area):
get_parent().get_node("Level 1/Area2D/Flag").rotation_degrees += 1
我试图完成的是 Player GameObject 将查看它是否在旗帜区域,如果是,旗帜将旋转。
我不确定问题出在哪里。我认为它可能在第二行。如果设置错误,我在下面提供了屏幕截图。我已经查看了关于同一主题的其他密切问题,但他们没有回答我的问题。
“玩家”游戏对象是包含检测脚本的对象,如果它在 area2D 中。
如果您想检查 Area2D
在运行时是否正确定位,请启用调试 -> 可见碰撞形状。
如果要检查 _on_Area2D_area_entered
是否为 运行,请添加断点(或使用打印)。
你有没有遇到错误?
如果那里没有 Node
,此表达式将导致运行时错误:
get_parent().get_node("Level 1/Area2D/Flag")
如果你想能够检查,你可以使用get_node_or_null
and is_instance_valid
。
既然你没有提到任何错误,我猜这个方法不是运行。
如果该方法不是 运行,最可能的罪魁祸首是 - 我猜给出了方法的名称 - 你连接了 "area_entered"
信号但打算连接 "body_entered"
信号。
"area_entered"
信号将在另一个 Area2D
进入 Area2D
时触发。但我在你的场景树中只看到一个 Area2D
。另一方面,"body_entered"
将在 PhysicsBody2D
(例如 StaticBody2D
、KinematicBody2D
、RigidBody2D
)进入 Area2D
时触发。在任何一种情况下,您都会得到作为方法参数输入的内容。
Area2D
可能无法检测到您想要的内容的其他原因包括 collision_layer
和 collision_mask
没有交集以及 monitoring
被禁用。
并消除一些可能的误解:
"area_entered"
和"body_entered"
在Area2D
或PhysicsBody2D
分别进入Area2D
时触发,不是每帧都在里面。 所以rotation_degrees += 1
不是旋转动画
- 您将收到任何触发信号的通知,而不仅仅是您连接到的对象。您可能需要进一步过滤,例如
if body == self:
.
这是我的代码:(只是让你知道我是一个初学者,我这周才开始,尽管我确实了解其他语言和游戏引擎)
func _on_Area2D_area_entered(area):
get_parent().get_node("Level 1/Area2D/Flag").rotation_degrees += 1
我试图完成的是 Player GameObject 将查看它是否在旗帜区域,如果是,旗帜将旋转。
我不确定问题出在哪里。我认为它可能在第二行。如果设置错误,我在下面提供了屏幕截图。我已经查看了关于同一主题的其他密切问题,但他们没有回答我的问题。
“玩家”游戏对象是包含检测脚本的对象,如果它在 area2D 中。
如果您想检查 Area2D
在运行时是否正确定位,请启用调试 -> 可见碰撞形状。
如果要检查 _on_Area2D_area_entered
是否为 运行,请添加断点(或使用打印)。
你有没有遇到错误?
如果那里没有 Node
,此表达式将导致运行时错误:
get_parent().get_node("Level 1/Area2D/Flag")
如果你想能够检查,你可以使用get_node_or_null
and is_instance_valid
。
既然你没有提到任何错误,我猜这个方法不是运行。
如果该方法不是 运行,最可能的罪魁祸首是 - 我猜给出了方法的名称 - 你连接了 "area_entered"
信号但打算连接 "body_entered"
信号。
"area_entered"
信号将在另一个 Area2D
进入 Area2D
时触发。但我在你的场景树中只看到一个 Area2D
。另一方面,"body_entered"
将在 PhysicsBody2D
(例如 StaticBody2D
、KinematicBody2D
、RigidBody2D
)进入 Area2D
时触发。在任何一种情况下,您都会得到作为方法参数输入的内容。
Area2D
可能无法检测到您想要的内容的其他原因包括 collision_layer
和 collision_mask
没有交集以及 monitoring
被禁用。
并消除一些可能的误解:
"area_entered"
和"body_entered"
在Area2D
或PhysicsBody2D
分别进入Area2D
时触发,不是每帧都在里面。 所以rotation_degrees += 1
不是旋转动画- 您将收到任何触发信号的通知,而不仅仅是您连接到的对象。您可能需要进一步过滤,例如
if body == self:
.