physics_joint_distance_create

最简单的关节之一是距离关节,它说明两个实例上两个点之间的距离必须是恒定的。指定距离关节时,应已创建两个实例并指定了装置,然后在房间坐标中定义两个锚点。第一个锚点连接到实例 1,第二个锚点连接到实例 2,这些点之间的距离表示距离约束的长度。下图显示了此函数的工作原理:

Distance joint illustration如您所见,锚点被指定为房间坐标,因此在定义它们时必须小心,尤其是如果实例与关节同时创建,而不是通过房间编辑器放置在房间中。您还应该意识到,关节的创建与实例的精灵大小或它们附着的装置的大小无关。因此,如果在实例原点以外的位置创建距离关节,则该距离关节仍然有效,并将相对于创建该距离关节的位置约束两个实例。如果将 "col" 值设置为 true,则两个实例可以相互作用并发生碰撞,但如果它们发生碰撞事件,则只能发生碰撞,但如果设置为 false,则无论发生什么情况,它们都不会发生碰撞。

 

语法:

physics_joint_distance_create(inst1, inst2, w_anchor1_x, w_anchor1_y, w_anchor2_x, w_anchor2_y, col)

参数类型描述
inst1Object Instance与关节连接的第一个实例
inst2Object Instance与关节连接的第二个实例
w_anchor1_xReal游戏世界中关节的第一个 X 坐标
w_anchor1_yReal游戏世界中关节的第一个 Y 坐标
w_anchor2_xReal游戏世界中关节的第二个 X 坐标
w_anchor2_yReal游戏世界中关节的第二个 Y 坐标
colBoolean这两个实例是否可以碰撞 (true) 或不碰撞 (false)

 

返回:

Physics Joint ID

 

例子:

var mainFixture, o_id;
mainFixture = physics_fixture_create();
physics_fixture_set_circle_shape(mainFixture, sprite_get_width(sprite_index) / 2);
o_id=instance_create_layer(x+300, y, "Instances", obj_Rudder);
physics_fixture_bind(mainFixture, id);
physics_fixture_bind(mainFixture, o_id);
physics_joint_distance_create(id, o_id, x + 50, y, o_id.x - 50, o_id.y, 0);
physics_fixture_delete(mainFixture);

上述代码创建并定义了一个新的装置,然后创建了一个 "obj_Rudder" 的实例。然后将装置指定给运行代码的实例以及新创建的实例,并在它们之间创建一个关节。最后,由于不再需要该装置,因此将其删除。