我一直在尝试使用 KinematicBody2D 的 test_move() 来查看我的角色是否靠近墙壁,但没有触摸它,但我遇到了一些麻烦,因为实际文档只是
bool test_move( Transform2D from, Vector2 rel_vec, bool infinite_inertia=true ) Checks for collisions without moving the body. Virtually sets the node's position, scale and rotation to that of the given Transform2D,
然后尝试沿着向量 rel_vec 移动身体。如果发生碰撞,则返回 true。
我能找到的所有教程都只显示了该函数的旧版本,其中唯一的参数是 Vector2,它更简单一些。
据我了解,Transform2D 是要测试的对象初始位置,Vector2 给出它应该移动的方向,无限惯性处理对象是否在撞击时旋转。
我现在的问题是 Transform2D,到目前为止,我在文档中找到的唯一一个似乎应该以该格式返回对象变换的函数是 CollisionObject2D
shape_owner_get_transform( int owner_id ) const Returns the shape owner's Transform2D.
但无论我尝试什么,我似乎总是从中得到一个单位矩阵,我最终试图弄清楚这一点的代码看起来像
var transform2d = Transform2D(owner.shape_owner_get_transform(owner.get_shape_owners()[0]))
if owner.test_move(transform2d, Vector2(-20, 0), true):
print("on your left").
我不确定我误解了哪个函数,无论是我用来获取 owner_id 的 test_move()、shape_owner_get_transform() 还是 get_shape_owners(),但我们将不胜感激。