摩擦关节与物理模拟中的所有其他关节稍有不同,因为创建的连接不会约束实例的位置或运动,而是约束其速度和旋转。这通过获取力和扭矩的最大输入值并将这些值应用到第二个装置来使速度和角动量下降到与第一个实例相同的值。因此,如果有一个固定实例和一个移动实例,然后使用摩擦关节将它们连接起来,则移动实例将逐渐减慢,直到它也是静止的。如果两个实例都在移动,则第二个实例的移动速度将被修改为与第一个实例的移动速度相匹配。
与大多数其他关节一样,您提供了要连接在一起的实例,以及要在房间内创建关节的位置。然后提供最大力和最大扭矩 (方向摩擦和旋转摩擦),如果将 "col" 值设置为 true,则两个实例可以相互作用并发生碰撞,但是只有在它们发生碰撞事件时才会发生碰撞,但是如果设置为 false,则无论发生什么情况,它们都不会发生碰撞。
physics_joint_friction_create(inst1, inst2, anchor_x, anchor_y, max_force, max_torque, col)
参数 | 类型 | 描述 |
---|---|---|
inst1 | Object Instance | 与关节连接的第一个实例 |
inst2 | Object Instance | 与关节连接的第二个实例 |
anchor_x | Real | 游戏世界中关节的 X 坐标 |
anchor_y | Real | 游戏世界中关节的 Y 坐标 |
max_force | Real | 将要施加的最大摩擦力 |
max_torque | Real | 将要施加的最大旋转力 |
col | Boolean | 这两个实例是否可以碰撞 (true) 或不碰撞 (false) |
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_friction_create(id, o_id, x, y, 10, 0.3, true);
physics_fixture_delete(mainFixture);
上述代码将创建一个装置,然后将其绑定到两个实例,然后使用摩擦关节连接两个实例。