physics_joint_revolute_create

旋转关节强制两个主体共享一个公共锚点 (通常称为铰点),并且关节具有单个自由度 - 即两个主体围绕该点的相对旋转。要指定旋转,需要在房间中提供两个实例和一个锚点,如所提供的图像中所示:

Revolute joint anchor points illustration如果您查看图像,可以看到这两个实例已创建为重叠,并且在它们接触的点处,我们定义了一个旋转关节。现在,由于 "ang_min_limit" 和 "ang_max_limit" 值,该关节的旋转自由度可能受到限制。这是如何工作的?好吧,让我们看看另一个图像:

Revolute joint angle limits illustration如您所见,物理世界中的角度与标准 GameMaker 的角度不同 ,其中右为 0 度,然后逆时针旋转,所以向上为 90 度,向左为 180 度,向下为 270 度。否,在处理旋转关节时,0 度轴从关节位置延伸到由函数定义的第二个实例的原点,然后沿顺时针方向计算角度。如果打开角度限制,则将限制定义为相对于此 0 度轴,并且限制范围 应包括零 ,否则当房间开始时,关节将倾斜。最后,可以将关节定义为是否具有马达。这意味着,当不受碰撞影响时,关节将沿着一个方向移动,该方向由马达速度定义,正数为顺时针方向,负数为逆时针方向。"max_motor_torque" 参数用于限制旋转速度,从而避免马达永久加速,并限制碰撞对旋转的影响。通过这种方式,可以使用马达关节通过将关节速度设置为零并将最大扭矩设置为某个较小但有效的值来模拟关节摩擦力。马达将尝试防止关节旋转,但会产生较大的负载。

与所有关节一样,如果将 "col" 值设置为 true,则两个实例可以相互作用并发生碰撞,但是如果它们发生碰撞事件,则只能 发生碰撞,但是如果设置为 false,则无论发生什么情况,它们都不会发生碰撞。

 

语法:

physics_joint_revolute_create(inst1, inst2, w_anchor_x, w_anchor_y, ang_min_limt, ang_max_limit, ang_limit, max_motor_torque, motor_speed, motor, col)

参数类型描述
inst1Object Instance与关节连接的第一个实例
inst2Object Instance与关节连接的第二个实例
w_anchor_xReal游戏世界中关节的 X 坐标
w_anchor_yReal游戏世界中关节的 Y 坐标
ang_min_limitReal关节角度的允许下限
ang_max_limitReal关节角度的允许上限
ang_limitBoolean是否限制关节的角度 (true) 或 (false)
max_motor_torqueReal设置用于实现所需马达转速的最大马达转矩(单位:牛顿/米)
motor_speedReal这是马达应该旋转的速度
motorBoolean马达是否应该启动 (true) 或不启动 (false)
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+25, y, "Instances", obj_Door);
physics_fixture_bind(mainFixture, id);
physics_fixture_bind(mainFixture, o_id);
physics_joint_revolute_create(id, o_id, x+25, y, -90, 90, 1, 0, 0, 0, 0);
physics_fixture_delete(mainFixture);

上述代码创建并定义了一个新的装置,然后创建 "obj_Door" 实例,将创建的装置绑定到两个新对象。然后通过一个没有马达的旋转关节连接它们,角度限制在 +/- 90 度回转。最后,由于不再需要该装置,因此将其删除。