3

I'm making a game using HaxeUI. I've designed a simple UI using XML definition. I need the button to execute a code that is unrelated to the UI elements, however, the parsed code from onClick property does not see any local identifiers defined in the area, in which the interface is being built.

How to work around this without the necessity to refrain from using XML definition?

4

1 回答 1

3

目前没有一种方法与您描述的完全一样,因为您在 XML 中定义您的点击处理程序并链接到 haxe 代码 - 存在这个开放的问题,基本上正如您所描述的那样:https ://github.com/haxeui/ haxeui-core/issues/196 - 我认为这将是一个有用的补充。

但是有这种方法(使用构建宏来构建自定义组件):

@:build(haxe.ui.macros.ComponentMacros.build("myxml.xml"))
class MySomething extends Box {
    public function new() {
        super();
        myButton.onClick = function(e) {
            myLabel.text = "Clicked";
        }
    }
}

此宏获取您的 xml(见下文)并为具有 id 的任何内容创建正确类型的成员变量。

<vbox>
    <button id="myButton" />
    <label id="myLabel" />
</vbox>

然后可以在代码或 xml 中自由地使用它:

Screen.instance.addComponent(new MySomething());
Screen.instance.addComponent(new MySomething());
Screen.instance.addComponent(new MySomething());

或者

<vbox>
    <mysomething />
    <mysomething />
    <mysomething />
</vbox>
于 2018-12-14T07:59:28.063 回答