如何显示自定义的错误信息
这是一个教你如何定义自己的自定义错误提示 ( GitHub上的完整的源代码)的教程,虽然不长,但是能够让你明白如何扩展VALVE的UI面板。
首先,我们需要使用Flash编辑器(例如Adobe Flash CS5)来创建一个名为 CustomError.fla的文件,同时,在同一位置创建一个CustomError.as文件,如果你并不明白如何完成这个工作,请先查看Flash的必要设置这个章节的内容,当然,也要在项目中导入VALVE的Globals类。
在完成了创建和导入的工作后,CustomError.as文件应该是这样:
package {
import flash.display.MovieClip;//导入Adobe的Flash类
import ValveLib.Globals;//导入VALVE的Globals类
public class CustomError extends MovieClip {
//以下这三个变量,为引擎所必须
public var gameAPI:Object;
public var globals:Object;
public var elementName:String;
//类的构造函数,在DOTA2的HUD中,我们一般使用onLoaded函数而不是构造函数来初始化HUD
public function CustomError() {
}
//onLoaded函数,将会在引擎载入这个HUD的时候执行。
public function onLoaded() : void {
//让UI可见
visible = true;
}
}
}
之后,我们需要在 custom_events.txt 文件中创建一个自定义事件,这个文件位于 "../game/dota_addons/<addon_name>/scripts/"
"CustomEvents"
{
"custom_error_show"//显示自定义错误信息的事件
{
"player_ID" "short"//事件数据变量名 - 玩家ID
"_error" "string"//事件数据变量名 - 错误信息
}
}
"custom_error_show" 是事件的名字,player_ID 和 _error 是事件的数据变量,我们之后将会在Lua代码中传递这两个变量,short 和 string 代表这两个数据的类型。
在Lua中触发这个事件之前,我们先到CustomError.as中监听这个事件,这个过程很简单,我们在 onLoaded() 函数中添加如下代码:
public function onLoaded() : void {
//让UI可见
visible = true;
//添加事件监听器
this.gameAPI.SubscribeToGameEvent("custom_error_show", this.showError);
}
"custom_error_show" 就是我们所监听的事件,this.ShowError代表HUD在监听到这个事件后将会调用的函数,所以我们现在来创建这个函数:
public function showError( args:Object ){
//获取这个HUD的本地玩家ID
var pID:int = this.globals.Players.GetLocalPlayer();
// 如果玩家ID和触发这个事件的玩家ID一致,那么就在HUD上显示 _error 的内容。
if( pID == args.player_ID ) {
this.globals.Loader_error_msg.movieClip.setErrorMsg(args._error);
}
}
其中,在 "public function showError( args:Object )" 中的 "args:Object" 变量会包含从LUA中传递过来的数据,我们使用 args.事件数据变量名 来获取他们的值。
这样 CustomError.as文件已经创建完成,他应该是:
package {
import flash.display.MovieClip;
import ValveLib.Globals;
public class CustomError extends MovieClip {
public var gameAPI:Object;
public var globals:Object;
public var elementName:String;
public function CustomError() {
}
public function onLoaded() : void {
//让UI可见
visible = true;
//添加事件监听器
this.gameAPI.SubscribeToGameEvent("custom_error_show", this.showError);
}
public function showError( args:Object ){
// 获取本地玩家ID
var pID:int = this.globals.Players.GetLocalPlayer();
// 如果玩家ID和事件中的玩家ID变量值一致,那么显示 _error 的内容
if( pID == args.player_ID ) {
this.globals.Loader_error_msg.movieClip.setErrorMsg(args._error);
}
}
}
}
之后,编译 CustomError.swf文件,并放到"../game/dota_addons/<addon_name>/resource/flash3/" 文件夹中,并在这个文件夹的 custom_ui.txt 文件中添加这个swf文件:
"CustomUI"
{
"1"
{
"File" "CustomError"
"Depth" "50"
}
}
完成了上述工作之后,你只需要在你需要显示错误的Lua代码中添加如下代码就可以显示了:
FireGameEvent('custom_error_show', { player_ID = <playerID>, _error = 'Insert custom error here!' } )
当然,你需要将<playerID>改为你所需要的玩家ID。
和Flash的必要设置中所写的一样,你可以将'Insert custom error here!'改为'#your_custom_error',来将它变成一个多语言的文本。
完成,撒花~
作者: Zedor
翻译: XavierCHN