meta data for this page
📚 宏文本及功能
《沙盘引擎》内置了一些“宏代码(Define)”,搭配相关API使用,可以将指定宏文本转换为实时获取结果的文本。
常用案例:网络传输后的本地翻译、内置信息获取(如玩家人数、版本等)、绑定按键映射等。
📒 常规宏文本
常规宏文本的表示方式:%define_key%
📘 本地翻译案例
例如开发者制作了一个团队射击游戏,通常会在有玩家被击杀后输出杀敌信息到公屏,代码看起来应该像这样:
if(killer.Entity.Group == 1) { Message("CT-Team: " + killer.Entity.Name + " killed " + player.Entity.Name ); }else if(killer.Entity.Group == 2){ Message("T-Team: " + killer.Entity.Name + " killed " + player.Entity.Name ); }
这样的代码本身没有什么问题,但是如果希望不同地区玩家最终看到的是本地翻译后的结果,这就需要使用宏定义来实现。
首先,开发者应该按照规范自定义好语言文件,然后记住要使用的语言Key(例如:Mod.TeamGroup.CT | T
)。
if(killer.Entity.Group == 1) { Message("%Mod.TeamGroup.CT%: " + killer.Entity.Name + " killed " + player.Entity.Name ); } }else if(killer.Entity.Group == 2){ Message("%Mod.TeamGroup.T%: " + killer.Entity.Name + " killed " + player.Entity.Name ); }
使用此方式发送的消息(Message | Announce | Subtitle...
)会自动将宏文本(%xxx%
)进行识别,如果语言Key正确且存在,则会在消息到达玩家本地后,自动识别为玩家本地的语言。
这样即可解决不同地区的玩家最终得到不同的翻译结果。
📘 内置信息案例
例如开发者希望输出一些内置信息,可参考引擎已存在的本地宏文本(可参考下方),按需进行使用。
Message("Your EngineVersion: %EngineVersion%"); //"Your EngineVersion: V0.77" Message("Current Players: %PlayerCount%"); //"Current Players: 1"
📘 绑定按键案例
有时开发者希望提醒玩家:“按下[?]键使用某功能”,如果开发者直接绑定按键代码,可以直接告知玩家服务器绑定的按键。
但如果开发者使用更为标准的BindNativeKey
绑定按键流程(允许玩家自定义按键),这就有可能出现玩家修改了默认按键的情况,此情况下需要获取到实时正确的按键代码,此问题可通过本地按键宏文本来解决。
Message("Press %KEY_World_Use% use!"); //"Press "F" use!
需要注意的是,如何让引擎知道这是一个本地按键宏文本?
没错,任何以KEY_
开头的宏文本均被优先认为是按键宏文本。
📒 引擎宏示例
特别提醒:由于宏的机制,宏文本应该用于最终本地玩家解析,因此最终获取的结果也是本地玩家解析后的结果。
宏文本 | 功能说明 |
---|---|
%Language% | 正在使用的引擎语言名称 |
%ModLanguage% | 正在使用的模组语言名称 |
%PlayerCount% | 当前世界玩家数量 |
%EngineVersion% | 引擎版本信息 |
%EngineEdition% | 游戏授权版本(标准版、白金版) |
%Engine% | 引擎版权信息 |
%EveryOne% | 翻译:Native.Common.LocalDefine[0] |
📒 宏文本API
默认情况下,宏文本可以直接在Message | Announce | Subtitle...
等功能自动进行解析,但如果有特殊或手动解析的需求,可以使用相关API过滤一次字符串。
宏文本解析API:FormatDefineText( text: string, includeColor: bool = true );
📒 资源引用宏
资源引用宏与常规宏文本的用法有些差异,其更多应用于UI部分。
📘 UI引用案例
在游戏UI设计过程中,有时可能希望使用一些资源图片加入到UI文本中,这可以很简单的利用资源引用宏的机制来实现。
得益于FairyGUI支持UBB语法的机制,沙盘引擎内置UI(如NativeMenu)支持UBB语法的图片置入。
图片语法:
<img src='imgurl' width='48' height='48'/>
开发者可通过此方法进行UI文本的图文混合搭配,但有时可能希望使用本地模组的相关Texture资源,这只需要将imgurl
替换为资源引用宏即可,此方法同样支持ID_10000+的模组自定义资源。
例如:使用TextureID_100的图片资源
Text: "<img src='sesprite://100' width='48' height='48'/> Test Title"
📘 资源宏示例
宏文本 | 功能说明 |
---|---|
sesprite:// +textureID | 获取指定Texture+ID资源 |
secursor:// +textureID | 获取指定Cursor+ID资源 |
seradaricon:// +textureID | 获取指定RadarIcon+ID资源 |
seprop:// +textureID | 获取指定Prop+ID资源 |
semodel:// +textureID | 获取指定Model+ID资源 |