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: "乔乔" }));
  }
}

 

⚠️ **GitHub.com Fallback** ⚠️