1

我想让玩家在游戏制作器(免费版)中改变重力方向。一旦玩家按下 Space,我想在当前重力方向上添加 90 度。

为了检查它是否与我的键绑定有关,我分配了一个命令,以便在按下 Space 键后将某些内容打印到控制台。它似乎工作正常。

我还不是很熟练,我试图找到关于改变重力的教程。要么他们不够清楚,要么他们只是解释了如何设置正常重力。

  • 我尝试使用带有gravity_direction的set变量函数

  • 我也尝试过使用设置重力功能,但这似乎对我也不起作用。

  • 我在这个位置设置了重力:rightclick object_player > properties > physics tab > Gravity X: 0.0 | Gravity Y: 30.0

  • 我尝试在带有变量的创建事件中手动设置重力:(gravity_direction: 270 gravity: 30 首先删除了对象属性的设置)

  • 我尝试将设置重力功能单独放在创建元素中以设置标准重力。

出于某种原因,在最后两种情况下,我向上浮动。

4

3 回答 3

0

特迪斯维特!这对我来说是一个相对简单的问题,所以我会继续回答。

所以,每次按空格键时,都希望重力方向增加 90 度。您需要做的就是打开您想要应用重力的对象,添加一个“按下空格”事件并在代码中编写

gravity_direction += 90;

希望这可以帮助!

于 2014-11-02T03:24:52.397 回答
0

尝试使用这个:

//如果您按下空格键并且世界重力以每秒 30 米的速度将您拉下,那么将重力更改为将您拉向左侧。

if (keyboard_check_pressed(vk_space) || physics_world_gravity(0, 30)) 
{
   physics_world_gravity(-30, 0);
}


if (keyboard_check_pressed(vk_space) || physics_world_gravity(-30, 0)) 
{
   physics_world_gravity(0, -30);
}


if (keyboard_check_pressed(vk_space) || physics_world_gravity(0, -30)) 
{
   physics_world_gravity(30, 0); 
}


if (keyboard_check_pressed(vk_space) || physics_world_gravity(30, 0)) 
{
   physics_world_gravity(0, 30); 
}

请记住,房间必须启用物理。您还可以更改这些数字以更改重力旋转的方向。这里的一个将顺时针工作。我希望这有帮助。

于 2014-12-23T14:00:17.990 回答
0

如果您没有使用物理引擎 (您会知道是否使用过),那么您可以使用成对变量gravitygravity_direction.

gravity变量控制重力的大小。将其设置为 1 就像将重力设置为 1px/s 2

通常我使用小于 10 的变量作为gravity变量。

gravity_direction变量控制重力的方向。它的范围从 0 到 360,其中最常用的值是 0(右)、90(上)、180(左)和 270(下)。

如果您希望重力向右(顺时针)改变 90 度,请使用gravity_direction += 90. 如果您希望重力向左改变 90 度(逆时针/逆时针方向),请使用gravity_direction -= 90.

只是一个警告,重力是在 End Step Event 之后应用的,所以如果你发现你的角色卡在墙上或有奇怪的碰撞问题,你可能想在 Begin Step 或 Step Event 中实现你自己的重力(我通常使用步骤事件)。

如果您使用的是 Physics Engine,则gravityandgravity_direction变量将不起作用。您需要使用physics_world_gravity(x, y)函数。这里,x控制水平重力,y控制垂直重力。

所以,如果你想要正常的重力,你会使用physics_world_gravity(0, 32),或者你想要的任何值y

不幸的是,没有确定当前重力的函数,所以你必须自己做:

global.gravity_x = 0;
global.gravity_y = 32;

physics_world_gravity(global.gravity_x, global.gravity_y);

通常,当我使用这个系统时,我喜欢转换为旧系统,其中有一个 manitude ( gravity) 和一个方向 ( gravity_direction)。所以相反,我会这样做:

global.phys_gravity_force = 32;
global.phys_gravity_direction = 270; // Down

global.phys_gravity_x = lengthdir_x(global.phys_gravity_force, global.phys_gravity_direction);
global.phys_gravity_y = lengthdir_y(global.phys_gravity_force, global.phys_gravity_direction);

physics_world_gravity(global.phys_gravity_x, global.phys_gravity_x);

每次您想改变世界的重力时,您都需要使用上面两个示例之一中的所有代码。在我看来,第二个更容易,每次你需要改变的只是global.phys_gravity_direction变量。

于 2015-04-02T17:55:47.523 回答