DynamicText - R32/heaps GitHub Wiki
DynamicText 一般用于处理一些简单的模板字符串, 例如: 获得了 ::100:: G币。
, 消灭 ::10:: 个怪物
。
这些模板字符串可保存为一个单独的 xml 文件, 以方便统一使用:
<texts>
<g id="x">
<t id="name">my name is ::name::.</t>
<t id="save_desc">::name:: - <img src="ico4" /> ::level:: - ::time:: </t>
<t id="pure">or pure letter</t>
</g>
<g id="y"></g>
<g id="z"></g>
<t id="a">a</t>
<t id="b">b</t>
<t id="c">c</t>
</texts>
文件规则如下:
-
根元素名字随意, 上边示例中的
texts
-
g
元素表示分组(group)的意思, g 的子元素只能是 t 或 g 元素 -
重要: 所有元素必须带有 id 属性(attr)
例外: g 元素下的 t 元素可以不包含 id 属性, 这时只能用遍历器的形式访问各 t 元素,
但只要有一个 t 元素带有 id 属性, 则同层下的所有 t 元素全都必须有 id 属性.
-
t
元素表示文本(text)的意思, 元素内部用于存放模板字符串, 使用:: ::
分识别模板,由于 heaps 支持几个 html 元素(称为 ui 元素), 因此除了纯文本还可以是 ui 元素, 当然你得使用 h2d.HtmlText 才能显示 ui 元素。
@:build(hxd.res.DynamicText.build("texts.xml") // 宏构建
class Texts {
}
如上所示, 定义一个类似于 Texts.hx(名字随意) 的类,"宏" 会根据 xml 文件自动构建 Texts 类的所有字段, 如果想要知道 "宏" 做了什么可以添加 -D dump=pretty
, 编译后即可在 dump 文件夹里查看
之后我们在另一个类中来调用它,我们可以将 texts.xml 另外保存为 texts.zhcn.xml
如果需要本地化(localization)
import hxd.Res;
class App {
static function main() {
Res.initEmbed(); // 选择资源挂载方式
Texts.load(Res.texts_xml.entry.getText()); // 通过资源管理器加载 xml 文件
trace(Texts.x.name({ // 以 Key/value 的形式传递模板变量
name: "Jojo"
}));
trace(Texts.x.pure); // 由于没有模板, 因此会直接返回字符串
trace(Texts.x.save_desc({
name: "Jojo",
time: "17:50",
level: 7
}));
var cn = Res.texts_zhcn_xml.entry.getText();
Texts.applyLang(cn); // 本地化(localization)
trace(Texts.x.name({ name: "乔乔" }));
}
}