在GameMaker中编写游戏时,错误报告的第一级是在代码或 GML 可视化编辑器中,它是语法检查器。当你编写代码或者添加动作时,GameMaker 会检查它是否遵循语言的语法,并标记出它发现的任何问题,这样你就可以在运行游戏或者编译可执行文件之前解决这些问题。
根据您是否在语法检查设置中启用了语法检查 ,语法错误检查会发生不同的情况。
这些错误分为两大类:
当你写代码的时候,语法错误会更新(在输入代码和窗口中出现的错误之间会有一个短暂的停顿,以防止未完成代码的错误被报告) ,并且会遵循以下格式:
[object] - [event] - [Line Number] - [Position In Line]: [error string]
或者,如果错误出现在脚本中,那么它将是:
[script] - [Line Number] - [Position in line]: [error string]
双击输出控制台中显示的任何错误,都会将您带到具有错误的对象事件或脚本中的行,以便您可以编辑它。
应该注意的是,其中一些错误将显示在代码中的特定位置,但实际错误可能是由其他地方引起的,或者一个问题可能引发多个错误消息:
在上面的图像中,所有三个错误
都是由一个错误引起的——在第220行中对函数variable_instance_exists()使用了分号“;”而不是逗号“,”。
下表列出了不同的语法错误及其主要原因:
错误(Error) | 类型(Type) | 描述 |
---|---|---|
Malformed reference [val] | ![]() | 这意味着存在一个内部 AST 验证错误(您应该永远不会看到这个错误,但是如果您确实看到了,请考虑从帮助菜单中提交错误报告) |
Malformed hexadecimal character escape sequence | ![]() | 如果在字符串中使用了转义字符的十六进制值,并且格式不正确,就会发生这种情况。 |
Unexpected node [val] | ![]() | 这意味着存在一个内部 AST 验证错误(您应该永远不会看到这个错误,但是如果您确实看到了,请考虑从帮助菜单中提交错误报告) |
Exception while parsing [val] | ![]() | 这意味着存在一个内部 AST 验证错误(您应该永远不会看到这个错误,但是如果您确实看到了,请考虑从帮助菜单中提交错误报告) |
Malformed id reference [val] | ![]() | |
Unnecessary expression [val] used as a statement | ![]() | 当语法检查器检测到一个表达式(在[val]中显示)时,将发生此错误。例如,下面的代码将抛出错误,因为它期望的三元运算符?错误的遇到了32 temp_x = x < (room_width / 2) 32: room_width - 32; |
Malformed array reference [val] | ![]() | 这意味着您试图以不正确的方式引用数组,[val]将显示引用。 |
Unexpected binary operator [val] | ![]() | 当您在不应该使用位操作符的位置使用位操作符时,会发生此错误,并且[val]显示位操作符的位置。 |
Unterminated string literal | ![]() | 当您使用@"或"编写字符串但在代码结束前未关闭该字符串时,将发生此错误。 |
Single quotes no longer allowed for string | ![]() | 当您尝试使用以单引号包装的字符串(例如: 'Hello World'而不是双引号,例如: "Hello World")时,会发生此错误。 |
Unexpected syntax error | ![]() | 此错误表示语法错误,解析器无法更具体地识别该错误。 |
Got "[val1]", expected "[val2]" | ![]() | 当语法检查器期望某个值或符号,但得到一个不同的值或符号时,就会发生这种情况,其中[val1]是当前符号或值,[val2]是期望的符号或值。例如: Got "{", expected "(" |
Got "[val1]", expected "[val2]" or "[val3]" | ![]() | 如上所述,但当有多个可能的预期符号。 |
Expected expression | ![]() | 当语法检查器期望一个表达式,但是没有给出该表达式时,就会发生此错误。 |
Empty [val] statement | ![]() | 当您终止一条语句并将其保留为空时,就会发生这种情况。例如,下面的代码将给出错误(注意终止分号) : if(x<0); |
Nested function calls are not allowed | ![]() | 当您试图在语句中嵌套函数调用时,例如: ds_list_find_value(list, 0)).sprite_index |
Number of arguments for function [val1] expected [val2] got val[3] | ![]() | 这个错误告诉您,您没有为[val1]所示的函数提供正确的参数数目,该函数期望得到[val2]中所示的参数数目,但是得到了[val3]中所示的参数数目。 |
Number of arguments for function [val1] expected [val2] - [val3] got [val4] | ![]() | 如上所述,只适用于一系列参数。 |
Duplicate enum entry found | ![]() | 此错误告诉您已经复制了一个枚举变量条目名称 |
Duplicate enum found | ![]() | 此错误告诉您已定义了两个或多个具有相同名称的枚举。 |
Missing variable name in globalvar | ![]() | 这说明您已经使用了globalvar声明,但是没有提供变量名。 |
Missing variable name in var | ![]() | 这说明您已经使用了var声明,但是忽略了提供变量名。 |
No matching #region found for #endregion | ![]() | 此错误意味着您在代码中声明了一个结束区域,而没有定义开始区域。 |
Unclosed #region found at end of script | ![]() | 这个错误意味着您已经在代码中的某个地方声明了一个区域,但是还没有为它在任何地方定义一个结束区域。 |
Unexpected terminal operator [val] | ![]() | 这意味着存在一个内部 AST 验证错误(您应该永远不会看到这个错误,但是如果您确实看到了,请考虑从帮助菜单中提交错误报告) |
Unexpected unary operator [val] | ![]() | 当一元运算符(如 + 、-、 = 等)在您的代码中找到了一个不需要的位置,在那里[val]将向您显示操作符。 |
Unexpected ternary operator [val] | ![]() | 这个错误意味着您在代码的某个地方错误地使用了三元运算符的一个部分,其中[val]显示了出错的部分。 |
Try needs to have catch or finally clause | ![]() | 此错误意味着您调用了try函数,但是忽略了包含catch或finally子句。 |
Macro [val] already exists | ![]() | 当您尝试定义与之前定义的宏同名的宏[val]时,可能会出现这个错误。 |
Malformed variable reference, got [val] | ![]() | 这意味着存在一个内部 AST 验证错误(您应该永远不会看到这个错误,但是如果您确实看到了,请考虑从帮助菜单中提交错误报告) |
Assignment to multi-relational-equality expression - GML does not support multiple assignments in an expression | ![]() | 此错误告诉您存在一个 GameMaker Language 不支持的多操作符赋值(也称为复合赋值)问题。这包括“ *= ”或“/= ”等等。. |
Macro [val] is unused | ![]() | 当宏[val]在代码中的任何地方未使用时,就会发生这种情况。 |
Variable [val] only referenced once | ![]() | 这意味着给定的变量[val]在代码中只引用一次。 |
Unassigned variable [val] referenced | ![]() | 这意味着变量[val]已经在您的代码中被引用,但是以前没有在任何地方被赋值。 |
Only functions that are declared as constructors can use inheritance | ![]() | 这个错误告诉您,您已经尝试对未声明为构造函数的函数使用继承。 |
Unknown function attribute [val] | ![]() | 这个错误意味着您在声明 in-kine 函数时尝试使用无效或未标识的函数修饰符([val])(函数修饰符类似于受支持的构造函数关键字)。 |
Inherited argument \"[val]\" is not in function arguments | ![]() | 当您尝试引用未在父函数定义中声明的继承函数中的参数时,会发生此错误。 |
[val] Creation Code | ![]() | 当您在房间创建代码中的某个地方出现错误[val]时,就会发生这种情况。 |
当“语法检查”被启用时,“语法错误”窗口将被“语法检查消息”窗口替换:
语法检查信息窗口列出语法检查在代码中遇到的错误和警告,以及在找到特定的代码模式时给出的建议。此处显示的错误类型取决于您在消息严重程度下的语法检查设置中定义的配置文件。
在这个窗口中,消息列表可以按照消息代码、消息文本(按字母顺序)或资源(按资源名称的字母顺序)进行升序或降序排序。也可以使用窗口右上角的搜索框进行搜索。
语法检查信息分为三类: