调试覆盖视图 The Debug Overlay

调试覆盖视图 是一个游戏内的叠加视图,显示有关游戏的各种实时调试信息。

默认情况下,它包括以下三个窗口:FPS(帧数)(默认打开)、Log(日志)Audio(音频)。此外,它还在右上角显示GameMaker版本,以及项目的版本和名称。

调试覆盖视图可以使用函数show_debug_overlayshow_debug_log访问调试视图,第一个函数在FPS窗口打开时打开,第二个函数在Log窗口打开时打开。

注意HTML5 目标平台不支持网络覆盖。

你可以在调试视图中使用dbg_view 来自定义你自己的视图。调试视图可以使用dbg_section添加节,您可以向其中添加控件,如滑块,字符串输入框等。这些允许您通过使用 ref_create创建的引用来更改变量的值。Debug菜单下的 DebugView选项决定自定义视图是否可见。所有的调试视图都列在views菜单下,可以在这里切换它们的可见性。

Debug

FPS

此窗口的标题栏显示纹理交换的当前数量、顶点批处理的数量、当前FPS(fps_real)以及显示堆叠时间值的栏:

注意 纹理交换和顶点批处理永远不会为零,默认下会显示2或3的值,因为即使有一个空房间和没有对象GameMaker仍然需要绘制和批处理东西。

在此窗口中,您有两个部分:一个图表和一个条形图。

默认情况下,图形显示FPS(fps_real),其中水平轴是自打开FPS菜单以来经过的时间量,垂直轴是帧时间(以秒为单位)。

帧时间 FrameTime值是处理每个帧所用的时间,以秒为单位。此值应小于单个帧所需的时间。如果游戏速度是例如设置为60 FPS,则每帧最多可占用1/60 = 0.0166……秒。如果超过这个时间,则意味着GameMaker仍在处理当前帧,而它应该已经在处理下一帧。因此,(真实的)FPS将低于游戏速度。

启用 堆叠 Stacked选项可显示GameMaker执行的特定处理类型的时间值:

这些是:

您可以单击右上角的每个值(在其彩色框旁边)以切换其可见性。

历史记录栏控制图形中可见的水平范围。您可以将其设置为1到30秒。

Log

此窗口显示输出日志,与IDE中"输出窗口"下显示的输出日志相同。

使用show_debug_messageshow_debug_message_ext显示的所有调试消息也显示在此处。

窗口底部的文本字段允许您提供基本的控制台输入:

注意当您在控制台输入中键入命令时,GameMaker会继续根据您提供的键盘输入触发事件,这意味着您的游戏仍会接收输入。

输入遵循几个规则:

第一个单词之后的所有后续单词都将转换为作为参数传递给函数的值,如下所示:

注意 所有脚本都在global结构的范围内执行。

一个简单的命令看起来像这样:

show_debug_message "Hello World!"

警告此处不应添加括号。如果像在GML代码中一样在此处添加它们,则函数将不会执行,并且会出现一行ERROR : unknown command(错误:未知命令)将显示在输出中。

最后,您可以清除输出并将其内容复制到剪贴板。

Audio

此窗口显示与游戏中播放的音频相关的调试信息。

图形显示音频线程上最近的输出缓冲区。这是GameMaker在所有混合和处理之后发送到音频设备的输出信号。

图中的横轴是缓冲区中的帧号,纵轴是振幅,通常在-1到1之间。

底部的列表显示了当前正在播放或可能播放声音的每个声音"源"。列显示以下值:

这些源受audio_channel_num值的限制。

该窗口也可以使用 audio_debug 函数打开。

Memory

此窗口显示与 GameMaker 内存使用情况相关的各种信息。

内存 部分显示操作系统为您的游戏 分配的内存 和当前剩余的 可用内存 ,以及两者随时间演变的图表 (以游戏形式表示) 帧)。

然后是关于 垃圾收集器 的部分,主要对应于 gc_get_stats 返回的信息。顶部有两个按钮: 强制收集 按钮强制垃圾收集器运行,而 切换 GC 按钮则启用 / 禁用垃圾收集器。该部分的底部是 GC 图表 ,它显示了触摸和收集的对象数量与时间 (以游戏帧表示) 的函数关系。

纹理

此窗口显示您的游戏使用的所有 纹理页面

它显示了 GameMaker 为所有 纹理组 生成的纹理,以及一些其他纹理,例如后备纹理。您创建的自定义 表面 以及 application_surface 也显示在此处。

重要信息 当您在纹理查看器中访问已卸载但仍在磁盘上的 动态纹理 时,它们将被加载到内存和 VRAM 中,以便可以显示。

拖动 纹理索引 滑块以选择纹理。对于每个纹理,都会显示以下信息:

调试视图

这将切换使用dbg_view创建的所有自定义调试视图的可见性。

视图 Views

此菜单列出了您使用dbg_view创建的所有自定义调试视图。

如果视图设置为可见,则每个菜单项都会显示调试视图的名称,并在右侧显示一个复选标记。单击菜单项可切换此调试视图的可见性。

注意 必须启用"调试"菜单的DebugView设置,才能显示任何自定义调试视图。

创建调试视图

创建自定义调试视图,使用dbg_view

custom_dbgview = dbg_view("Custom Debug View", true);

第一个参数是它的名称,第二个参数是它的可见性。可以传递可选参数以自定义其位置和大小。

在调试视图中,可以使用dbg_section创建节:

custom_section = dbg_section("Custom Section");

您可以向这些部分添加控件,这些控件通过使用ref_create创建的引用显示和/或修改它们链接到的值。

可以创建对所有类型变量的引用。每个控件支持对一个或多个数据类型的引用。

重要 变量必须存在于结构实例中,因为调试视图只声明一次,因此无法显示局部变量。

从视觉上看,控件被布置在一个网格中,该网格包含两列:大多数控件跨越两列,有些控件仅跨越一列。通过调用dbg_same_line,可以将两个单列控件放在一行上:

button1 = function()
{
    show_debug_message("Button1 clicked!");
}

ref = ref_create(self, "button1");
dbg_text("This text will go here");
dbg_same_line();
dbg_button("Button1", ref);

注意 在创建节之前创建的调试控件将添加到名为"Default"(默认)的新节中。在创建调试视图之前创建的调试节将添加到调试视图"Default"中。

以上代码行将在调试覆盖中显示以下窗口:

系统 System

此菜单包含两个与调试覆盖相关的设置:

键盘 和 鼠标事件

当鼠标位于调试覆盖层的任何菜单或窗口上时,或者当调试覆盖层需要键盘输入时,GameMaker 将不会触发任何键盘或鼠标事件。不过,keyboard_checkmouse_check_button 等函数的工作原理仍然相同。如果您想在这种情况下获得相同的结果,可以使用 is_keyboard_used_debug_overlay 和 / 或 is_mouse_over_debug_overlay 返回的值:

if (!is_keyboard_used_debug_overlay() && keyboard_check(vk_up))
{
    // Execute code here
}

注意 当光标位于文本框控件上以及拖动窗口 (通过单击并按住鼠标左键) 时,调试叠加层将认为 " 已使用 " 键盘。

函数参考 Function Reference

常规

视图 Views

控制 Controls

键盘 和 鼠标