调试模式
GM 为我们测试游戏提供了两种方式:
绿色的是“运行游戏”,即以正常的方式运行游戏,最终发布之前一定要用这个方式运行一次以确保没有 bug。
红色的是“运行调试模式”。所谓调试模式(Debug Mode),就是让游戏在 GM 的监控下运行,你可以实时把握每一个实例的数据与动向,以方便发现并修正游戏的 bug。我们这节所讲的就是调试模式。
打开调试模式之后,应该会有这样的一个界面:
我们先来看看状态栏的数据。
50 fps
指的是当前游戏帧率。192 ins
指当前房间内有 192 个实例。mouse id: 100248
指的是鼠标所指向的那个实例的 id 为 100248。
现在我们来说一下最重要的三个用法,监视值,监视实例,临时执行代码。
监视值
监视值需要用到 Watch 下的 Add,或者直接点按钮栏的加号:
你可以添加监视任何一个变量,要以对象名/实例名作为前缀。如:world.death
, (100248).x
等,使用对象名监控变量,默认给出该对象 id 最小的那个实例的值。实例名可以通过上述的 mouse id 来获取。
同样的,你也可以监控任意有返回值的函数,如:instance_number(obj)
(返回 obj 的实例数量), point_distance((100248).x, (100248).y, (100259).x, (100259).y)
, keyboard_check(vk_up)
等。
更甚者,你可以进行任意的运算。如:56+98
, sin(5.6*pi)
等。
监视实例
监视实例位于 Tools 下的 Show Local Variables:
选择之后,输入你想要监控的实例的 id。也可以输入对象名,默认监视 id 最小的那个。如果你想监控特殊实例 global 的变量,请选择 Show Global Variables。
监视窗口中一共有四组数据。
- 第一组是实例的最根本属性,可以看到里面有坐标,速度,重力,阻力等值。
- 第二组是实例的基本属性,可以看到有可见,固体,id,深度等。
- 第三组是实例的路径属性,我们还没有学到,先不用管。
- 第四组是实例的自定义变量,我们自己定义的变量都在这里找。
临时执行代码
临时执行代码位于 Tools 下的 Execute codes:
你可以在游戏运行时临时让游戏执行一些什么代码,以满足调试的需求。
debug_mode
说到调试,就不能不提 GM 自带的变量 debug_mode
。
这个变量不可被修改,他只和游戏本身的运行方式有关。在正常运行游戏的时候,debug_mode
的值为 0,而在调试模式下运行游戏时,debug_mode
的值为 1。即:
1
2
3
4
if (debug_mode)
{
xxxx;
}
其中代码 xxxx,只有你在调试模式下才会执行,而生成的 exe 发布给玩家时则不会执行。换句话而言,我们可以用 debug_mode
开启只有我们制作者才有的特殊权限。
举个例子,我不想每次调试的时候都一关一关打,这样太浪费时间,所以我在 world 的 step 里写:
1
2
3
4
5
6
7
if (debug_mode)
{
if (keyboard_check_press(ord('K')))
room_goto_next(); // 跳到下一个房间
if (keyboard_check_press(ord('J')))
room_goto_previous(); // 跳到上一个房间
}
这样就可以按 J 和 K 任意跳关。
但是这样总感觉不够,于是我又写下了下面这个代码:
1
2
3
4
5
6
7
8
if (debug_mode)
{
if (mouse_check_button_press(mb_left))
{
objPlayer.x = mouse_x;
objPlayer.y = mouse_y;
}
}
这样,只要我点击屏幕某个位置,角色就会被传送过去,更方便了调试。
if (debug_mode)
下的代码只有在调试模式下执行,所以当你要发布你的游戏时,你不需要把这些代码删掉,因为它们根本不会执行。