physics_joint_prismatic_create

与旋转运动类似,棱柱关节只有一个自由度,但使用此关节时,它相对于轴是方向性的,而不是旋转的,实际上会阻止任何形式的旋转。下面是一张图片,可帮助您直观了解这种方式的工作原理:

Prismatic joint anchor points illustration 我们有两个实例在锚点处连接,其中一个运动轴由矢量定义,两个 w_axis x/y 坐标相对于物理世界的 (0,0) 坐标 (因此 x 分量为 0,y 分量为 1(0,1) 会使关节成为垂直棱柱关节)。然后,此关节只能 相对于此轴移动,如弹簧或活塞。如果设置传输限制的下限或上限,则基本上是限制沿此轴的移动量,其中 0 位置是使用 w_anchor x/y 定义的精确点,因此负值将沿轴转到该点的 " 左",正值将转到 " 右",如下图所示 (请注意,"左" 和 "右" 是相对术语!):

Prismatic joint limits illustration你也可以将关节定义为是否具有马达。这意味着,当不受碰撞影响时,关节将沿轴向移动。此方向由马达速度定义,正数朝向轴坐标 (" 右 "),负数朝向锚点 (" 左 ")。"max_motor_force" 参数用于限制移动速度,以便不会得到永久加速的马达,并限制碰撞可能对移动的影响。通过这种方式,可以使用关节马达来模拟关节的摩擦力,方法是将关节的速度设置为零,并将最大力设置为某个较小但有意义的值。马达将尽量防止关节移动,但会产生较大的负载。

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

 

语法:

physics_joint_prismatic_create(inst1, inst2, w_anchor_x, w_anchor_y, w_axis_x, w_axis_x, lower_trans_limit, upper_trans_limit, limit, max_motor_force, motor_speed, motor, col)

参数类型描述
inst1Object Instance与关节连接的第一个实例
inst2Object Instance与关节连接的第二个实例
w_anchor_xReal游戏世界中关节定位的 X 坐标
w_anchor_yReal游戏世界中关节定位的 Y 坐标
w_axis_xReal轴向量的 X 分量
w_axis_yReal轴向量的 Y 分量
lower_trans_limitReal关节运动允许的下限
upper_trans_limitReal关节运动允许的下限
limitBoolean是否限制关节的运动 (true) 或 (false)
max_motor_forceReal设置马达的最大移动速度
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_Piston);
physics_fixture_bind(mainFixture, id);
physics_fixture_bind(mainFixture, o_id);
physics_joint_prismatic_create(id, o_id, x, y, 0, 10, 0, 0, 0, 5, 0, 1, 1);
physics_fixture_delete(mainFixture);

上述代码创建并定义了一个新的装置,然后创建 "obj_Piston" 的实例,将创建的装置绑定到两个新对象。然后通过棱柱关节将它们连接起来,所述棱柱关节具有在第一实例的相同 x/y 坐标处的锚定位置和由 x/y 位置和轴 x/y(在这种情况下为 " 向下 ") 的矢量形成的轴。沿此轴的移动量没有限制,但我们添加了一个速度为 0 且最大力为 5 的马达来模拟关节摩擦。