meta data for this page
📚 差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
| developer:define [2025/07/24 19:55] – 移除 - 外部编辑 (Unknown date) 127.0.0.1 | developer:define [2025/12/03 17:03] (当前版本) – bibiboxs | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | < | ||
| + | # 宏文本 | ||
| + | > 沙盘引擎 内置了一些**“宏代码(Define)”**,搭配相关API使用,可以将指定宏文本转换为实时获取结果的文本。 | ||
| + | > | ||
| + | > **常用案例:网络传输后的本地翻译、内置信息获取(如玩家人数、版本等)、绑定按键映射等。** | ||
| + | |||
| + | |||
| + | |||
| + | ## 常规宏文本 | ||
| + | |||
| + | [note2] | ||
| + | |||
| + | **常规宏文本的表示方式:`%define_key%`** | ||
| + | |||
| + | [/note] | ||
| + | |||
| + | |||
| + | |||
| + | ### 本地翻译案例 | ||
| + | |||
| + | 例如开发者制作了一个团队射击游戏,通常会在有玩家被击杀后输出杀敌信息到公屏,代码看起来应该像这样: | ||
| + | |||
| + | ```javascript | ||
| + | if(killer.Entity.Group == 1) | ||
| + | { | ||
| + | Message(" | ||
| + | }else if(killer.Entity.Group == 2){ | ||
| + | Message(" | ||
| + | } | ||
| + | ``` | ||
| + | |||
| + | 这样的代码本身没有什么问题,但是如果希望**不同地区玩家最终看到的是本地翻译后的结果**,这就需要使用宏定义来实现。 | ||
| + | |||
| + | 首先,开发者应该按照规范自定义好语言文件,然后记住要使用的语言Key(例如:`Mod.TeamGroup.CT | T`)。 | ||
| + | |||
| + | ```javascript | ||
| + | if(killer.Entity.Group == 1) | ||
| + | { | ||
| + | Message(" | ||
| + | } | ||
| + | }else if(killer.Entity.Group == 2){ | ||
| + | Message(" | ||
| + | } | ||
| + | ``` | ||
| + | 使用此方式发送的消息(`Message | Announce | Subtitle...`)会自动将宏文本(`%xxx%`)进行识别,如果语言Key正确且存在,则会在消息到达玩家本地后,自动识别为玩家本地的语言。 | ||
| + | |||
| + | **这样即可解决不同地区的玩家最终得到不同的翻译结果。** | ||
| + | |||
| + | |||
| + | |||
| + | ### 内置信息案例 | ||
| + | |||
| + | 例如开发者希望输出一些内置信息,可参考引擎已存在的**本地宏文本(可参考下方)**,按需进行使用。 | ||
| + | |||
| + | ```javascript | ||
| + | Message(" | ||
| + | Message(" | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### 绑定按键案例 | ||
| + | |||
| + | 有时开发者希望提醒玩家:“按下[? | ||
| + | |||
| + | 但如果开发者使用更为标准的`BindNativeKey`绑定按键流程(允许玩家自定义按键),这就有可能出现玩家修改了默认按键的情况,此情况下需要获取到实时正确的按键代码,此问题可通过**本地按键宏文本**来解决。 | ||
| + | |||
| + | ```javascript | ||
| + | Message(" | ||
| + | ``` | ||
| + | |||
| + | [note2] | ||
| + | |||
| + | 需要注意的是,如何让引擎知道这是一个**本地按键宏文本**? | ||
| + | |||
| + | **没错,任何以`KEY_`开头的宏文本均被优先认为是按键宏文本。** | ||
| + | |||
| + | [/note] | ||
| + | |||
| + | |||
| + | |||
| + | ## 引擎宏示例 | ||
| + | |||
| + | > 特别提醒:由于宏的机制,宏文本应该用于最终本地玩家解析,因此最终获取的结果也是本地玩家解析后的结果。 | ||
| + | |||
| + | | 宏文本 | ||
| + | | ----------------- | ------------------------------------ | | ||
| + | | `%Language%` | ||
| + | | `%ModLanguage%` | ||
| + | | `%PlayerCount%` | ||
| + | | `%EngineVersion%` | 引擎版本信息 | ||
| + | | `%EngineEdition%` | 游戏授权版本(标准版、白金版) | ||
| + | | `%Engine%` | ||
| + | | `%EveryOne%` | ||
| + | | `%PlayerName%` | ||
| + | | `%FPS%` | ||
| + | |||
| + | |||
| + | |||
| + | ## 宏文本API | ||
| + | |||
| + | > 默认情况下,宏文本可以直接在`Message | Announce | Subtitle...`等功能自动进行解析,但如果有特殊或手动解析的需求,可以使用[相关API](scripting/ | ||
| + | |||
| + | **宏文本解析API:`FormatDefineText( text: string, includeColor: | ||
| + | |||
| + | |||
| + | |||
| + | ## 资源引用宏 | ||
| + | |||
| + | [note2] | ||
| + | |||
| + | **资源引用宏与常规宏文本的用法有些差异,其更多应用于UI部分。** | ||
| + | |||
| + | [/note] | ||
| + | |||
| + | |||
| + | |||
| + | ### UI引用案例 | ||
| + | |||
| + | 在游戏UI设计过程中,有时可能希望使用一些资源图片加入到UI文本中,这可以很简单的利用**资源引用宏**的机制来实现。 | ||
| + | |||
| + | > 得益于FairyGUI支持UBB语法的机制,沙盘引擎内置UI(如NativeMenu)支持UBB语法的图片置入。 | ||
| + | > | ||
| + | > 图片语法: | ||
| + | > ``` | ||
| + | > <img src=' | ||
| + | > ``` | ||
| + | |||
| + | 开发者可通过此方法进行UI文本的图文混合搭配,但有时可能希望使用本地模组的相关Texture资源,这只需要将`imgurl`替换为**资源引用宏**即可,此方法同样支持ID_10000+的模组自定义资源。 | ||
| + | |||
| + | 例如:使用TextureID_100的图片资源 | ||
| + | ``` | ||
| + | Text: "< | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ### 资源宏示例 | ||
| + | |||
| + | | 宏文本 | ||
| + | | ----------------------------- | ------------------------ | | ||
| + | | `sesprite:// | ||
| + | | `secursor:// | ||
| + | | `seradaricon:// | ||
| + | | `seprop://` +`textureID` | 获取指定Prop+ID资源 | | ||
| + | | `semodel:// | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | </ | ||