如何显示自定义的错误信息

From Valve Developer Community
< Dota 2 Workshop Tools:zh-cn‎ | Custom UI:zh-cn
Revision as of 12:15, 11 September 2014 by F1rstDan (talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
English

示例视频

这是一个教你如何定义自己的自定义错误提示 ( GitHub上的完整的源代码)的教程,虽然不长,但是能够让你明白如何扩展VALVE的UI面板。

首先,我们需要使用Flash编辑器(例如Adobe Flash CS5)来创建一个名为 CustomError.fla的文件,同时,在同一位置创建一个CustomError.as文件,如果你并不明白如何完成这个工作,请先查看Flash的必要设置这个章节的内容,当然,也要在项目中导入VALVE的Globals类。

在完成了创建和导入的工作后,CustomError.as文件应该是这样:

package  {
	
	import flash.display.MovieClip;//导入AdobeFlash
	
	import ValveLib.Globals;//导入VALVEGlobals
				
	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