如何修复 Godot 中的所有 area2D 函数,使其在启动时不 运行?
How can I fix all my area2D functions in Godot to not run on startup?
好的,我已经使用 Godot 一段时间了,并没有遇到任何问题。但是,在我添加了一个 area2D 来检测玩家并如下所示传送他们之后,我 运行 遇到了问题。每次我开始游戏时,控制台都会显示这两个功能已经 运行,即使起始位置离 area2Ds 很远。此外,因为它们 运行 进入 -> 退出顺序,它会在隧道出口处生成我,而不是地图的起点。
func _on_Tunnel_body_entered(_body):
print("entered_tunnel")
global_position.x = 952.5
global_position.y = 487
func _on_TunnelBack_body_entered(_body):
print("exited_tunnel")
global_position.x = 920
global_position.y = 635
如有任何帮助,我们将不胜感激!
您是偶然实例化玩家角色,将其添加到场景,然后设置其位置(按此顺序)吗?
这是此问题的常见原因。发生的情况是,一旦您将其添加到场景但在您设置其位置之前,它就会与区域发生碰撞。
要解决它,请在将其添加到场景之前设置全局位置。
您可以通过以下任一方式暂时禁用该行为:
- 暂时更改图层和遮罩以避免碰撞(您可以使用
set_collision_layer_bit
和 set_collision_mask_bit
)。
- 暂时禁用碰撞形状(通过将
disabled
设置为 true
。但是,使用 set_deferred
以避免在 Godot 仍在进行物理计算时禁用它)
- 临时添加碰撞异常(通过调用
add_collision_exception_with
和remove_collision_exception_with
)。
- 有一个标志,您可以检查接收信号的函数来决定它是否应该生效。
- 连接代码中的信号一次,所以它们事先没有连接。
好的,我已经使用 Godot 一段时间了,并没有遇到任何问题。但是,在我添加了一个 area2D 来检测玩家并如下所示传送他们之后,我 运行 遇到了问题。每次我开始游戏时,控制台都会显示这两个功能已经 运行,即使起始位置离 area2Ds 很远。此外,因为它们 运行 进入 -> 退出顺序,它会在隧道出口处生成我,而不是地图的起点。
func _on_Tunnel_body_entered(_body):
print("entered_tunnel")
global_position.x = 952.5
global_position.y = 487
func _on_TunnelBack_body_entered(_body):
print("exited_tunnel")
global_position.x = 920
global_position.y = 635
如有任何帮助,我们将不胜感激!
您是偶然实例化玩家角色,将其添加到场景,然后设置其位置(按此顺序)吗?
这是此问题的常见原因。发生的情况是,一旦您将其添加到场景但在您设置其位置之前,它就会与区域发生碰撞。
要解决它,请在将其添加到场景之前设置全局位置。
您可以通过以下任一方式暂时禁用该行为:
- 暂时更改图层和遮罩以避免碰撞(您可以使用
set_collision_layer_bit
和set_collision_mask_bit
)。 - 暂时禁用碰撞形状(通过将
disabled
设置为true
。但是,使用set_deferred
以避免在 Godot 仍在进行物理计算时禁用它) - 临时添加碰撞异常(通过调用
add_collision_exception_with
和remove_collision_exception_with
)。 - 有一个标志,您可以检查接收信号的函数来决定它是否应该生效。
- 连接代码中的信号一次,所以它们事先没有连接。