与旋转运动类似,棱柱关节只有一个自由度,但使用此关节时,它相对于轴是方向性的,而不是旋转的,实际上会阻止任何形式的旋转。下面是一张图片,可帮助您直观了解这种方式的工作原理:
我们有两个实例在锚点处连接,其中一个运动轴由矢量定义,两个 w_axis x/y 坐标相对于物理世界的 (0,0) 坐标 (因此 x 分量为 0,y 分量为 1(0,1) 会使关节成为垂直棱柱关节)。然后,此关节只能 相对于此轴移动,如弹簧或活塞。如果设置传输限制的下限或上限,则基本上是限制沿此轴的移动量,其中 0 位置是使用 w_anchor x/y 定义的精确点,因此负值将沿轴转到该点的 " 左",正值将转到 " 右",如下图所示 (请注意,"左" 和 "右" 是相对术语!):
你也可以将关节定义为是否具有马达。这意味着,当不受碰撞影响时,关节将沿轴向移动。此方向由马达速度定义,正数朝向轴坐标 (" 右 "),负数朝向锚点 (" 左 ")。"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)
参数 | 类型 | 描述 |
---|---|---|
inst1 | Object Instance | 与关节连接的第一个实例 |
inst2 | Object Instance | 与关节连接的第二个实例 |
w_anchor_x | Real | 游戏世界中关节定位的 X 坐标 |
w_anchor_y | Real | 游戏世界中关节定位的 Y 坐标 |
w_axis_x | Real | 轴向量的 X 分量 |
w_axis_y | Real | 轴向量的 Y 分量 |
lower_trans_limit | Real | 关节运动允许的下限 |
upper_trans_limit | Real | 关节运动允许的下限 |
limit | Boolean | 是否限制关节的运动 (true) 或 (false) |
max_motor_force | Real | 设置马达的最大移动速度 |
motor_speed | Real | 这是马达应该移动的速度 |
motor | Boolean | 马达是否应该启动 (true) 或不启动 (false) |
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+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 的马达来模拟关节摩擦。