问题描述
我对 Godot 和 GDScript 比较陌生,但我学得很快,所以我开始尝试制作 2D 平台游戏,您可以在其中四处走动、在墙上攀爬和滑行、从墙上跳下并留在墙上。我正在使用从 x 轴上的玩家出发的 raycast2D 来检测玩家何时触摸 area2D(在这种情况下,也是一个 staticbody2D 的瓷砖)。为了测试这一点,我写道:
onready var raycast = get_node("RayCast2D")
func _physics_process(delta):
if raycast.collide_with_areas == true:
print("area")
我遇到的问题是控制台一直在打印区域,这意味着我所有的图块都是 area2Ds(其中一些只是 staticbody2D)。为什么我所有的图块都是 area2Ds ?
解决方法
来自RayCast2D class documentation:
bool collide_with_areas [default: false]
set_collide_with_areas(value) setter
is_collide_with_areas_enabled() getter
If true,collision with Area2Ds will be reported.
您使用 collide_with_areas
好像它表示光线投射当前是否与区域发生碰撞,而实际上它是一个类属性,表示光线投射是否应该报告与区域的碰撞。
相反,您应该将 collide_with_areas
(和 enabled
!)设置为 true(通过检查器或代码),然后调用 raycast.get_collider()
。