当运行时异常发生时,此运行时函数可用于 "接管" 默认的GameMaker错误消息。您提供了一个在异常发生时调用的方法或函数,其第一个参数将是包含异常信息的结构(称为异常结构)。此结构具有以下格式:
异常结构 | ||
---|---|---|
变量 | 类型 | 描述 |
message | String | 异常的短消息 |
longMessage | String | 异常的较长消息 |
script | String | 描述异常来源的字符串 |
line | Real | 异常来源的行号 |
stacktrace | Array of Strings | 生成异常时作为帧的调用栈的字符串数组 |
您还可以提供undefined作为参数,这将删除自定义异常处理程序(如果已设置)并恢复为GameMaker的默认错误消息。
此函数将返回先前设置的异常处理程序方法,但如果它从未更改或之前使用undefined重置,则它将仅返回undefined。
向该函数传递方法意味着不会向用户显示错误消息,并且您将被允许自己处理异常。但是,您不能用这个"突破"异常来继续游戏,因为在调用异常处理程序之后游戏仍将关闭。当游戏在崩溃后需要关闭时,您也不能调用使游戏运行时间长于最终帧的函数(例如game_restart())。
请注意,运行方法的上下文在事件中不是,因此此时无法向屏幕呈现任何内容。一般来说,此时可以做的最安全的事情是保存一个包含异常上下文信息的文件,以便在下一次运行游戏时对其进行分析和处理,然后进行处理。
请注意,如果在提供的方法中使用return语句,则给定值将转换为整数,并用作运行程序的exit代码。
exception_unhandled_handler(user_handler);
参数 | 类型 | 描述 |
---|---|---|
user_handler | Method | 要用作异常处理程序的方法(用户定义的函数),或undefined将其重置为默认值。 |
exception_unhandled_handler(function(ex)
{
// Print some messages to the output log
show_debug_message( "--------------------------------------------------------------");
show_debug_message( "Unhandled exception " + string(ex) );
show_debug_message( "--------------------------------------------------------------");
// Write the exception struct to a file
if file_exists("crash.txt") file_delete("crash.txt");
var _f = file_text_open_write("crash.txt");
file_text_write_string(_f, string(ex));
file_text_close(_f);
// Show the error message (for debug purposes only)
show_message(ex.longMessage);
return 0;
});
上面的代码将创建一个异常处理程序方法,并使用它来保存包含异常数据的文件。出于调试目的,它还将在新的弹出窗口中显示长错误消息。