physics_joint_gear_create

如果要创建复杂的机械装置,可能需要使用齿轮。原则上,您可以通过使用复合实例在 GameMaker 中创建齿轮来模拟齿轮齿,但这不是很有效,编写起来可能会很乏味!谢天谢地,有一个更简单的方法,那就是使用齿轮关节。要创建一个,您需要先定义您的固定装置并创建将组成您的齿轮的两个基本关节 - 这些必须由一个旋转关节和一个棱柱关节或另一个旋转关节组成。下图显示了通常在游戏中如何创建齿轮:

Gear joint illustration 发生了什么事?一旦将两个关节添加到齿轮中,与一个关节的相互作用将对另一个关节产生影响,因此在上面的示例图像中,如果在 inst2 中旋转,则 inst3 将上下移动,或者如果在 inst3 中上下移动,则 inst2 将旋转。也可以更改齿轮比率,这意味着需要多移动一个实例 (或少移动一个实例) 才能获得所需的效果。底部示例中的代码显示了如何创建类似上图的内容。

注意 如果您需要删除齿轮联接中涉及的两个实例中的任何一个 (或仅删除它们的联接),则必须使用 physics_joint_delete() 删除齿轮联接,否则将出现错误!

 

语法:

physics_joint_gear_create(inst1, inst2, joint_1, joint_2, ratio)

参数类型描述
inst1Object Instance与关节连接的第一个实例
inst2Object Instance与关节连接的第二个实例
joint_1Real先前定义的旋转关节类型
joint_2Real先前定义的旋转棱柱关节
ratioReal设置两个关节之间的速度比率

 

返回:

Physics Joint ID

 

例子:

var t_fix, g_fix, inst1, inst2, inst3, r_joint, p_joint;
g_fix = physics_fixture_create();
physics_fixture_set_box_shape(g_fix, 40, 10);
t_fix = physics_fixture_create();
physics_fixture_set_circle_shape(t_fix, 10);
physics_fixture_set_density(t_fix, 0.5);
inst1 = instance_create_layer(60, room_height - 30, "Background", obj_Ground);
inst2 = instance_create_layer(40, room_height - 300, "Instances", obj_Cog);
inst3 = instance_create_layer(150, room_height - 300, "Instances", obj_Barrel);
physics_fixture_bind(g_fix, inst1);
physics_fixture_bind(t_fix, inst2);
physics_fixture_bind(t_fix, inst3);
r_joint = physics_joint_revolute_create(inst1, inst2, 40, room_height - 300, -80, 80, 1, 10, 0.5, 1, 0);
p_joint = physics_joint_prismatic_create(inst1, inst3, 150, room_height - 300, 0, 1, -10, 10, true, 0, 0, 0, 0);
physics_joint_gear_create(inst2, inst3, r_joint, p_joint, 0.5);

上述代码创建和定义两个装置,然后创建三个实例,"一个 obj_Ground" 和另外两个 "obj_Cog" 和 "obj_Barrel"。然后将装置绑定到这些实例,并创建两个关节。地面和齿轮之间的旋转关节,以及地面和圆筒之间的棱柱形关节。最后,使用先前定义的旋转关节和棱柱关节在齿轮和圆柱体实例之间创建齿轮关节。