从字符串haxe获取一个类

时间:2014-05-14 04:05:11

标签: types haxe

我正在将实体解析为xml,我遇到了一个问题:我的引擎使用了组件,我希望能够在我的xml中添加组件,在这样的结构中:

<entity tag="player" x="0" y="0">
    <art width="32" height="32" path="some/path/here">
        <animation name="idle" frames="0,1,2" framerate="10" looped="true" />
    </art>
    <component type="MovementComponent">
        <param name="speed" value="10"/>
    </component>
</entity>

(直到组件解析完成的部分:))

所以我想:每个组件都可以实现一个静态build(parameters:Map):TypeOfComponent函数,并使用这些值做它想要的东西,这很容易吗?但是,如何从字符串标识符中获取组件类,是否有haxe函数来执行此操作?我只需要这个类,所以我可以调用static build()函数,有人知道怎么做吗? 谢谢, 尼科

1 个答案:

答案 0 :(得分:2)

所以我在Jason O'Neil的帮助下,在上面的评论中解决了这个问题。我强制在参数元素<param name="speed" type="int" value="10"/>中提供“type”属性,并使用它们将所有值强制转换为正确的类型。然后我将每个参数放入一个数组并使用:

var classType = Type.resolveClass(component.get("type"));
var newComponent = Type.createInstance(classType, params);

根据xml中包含的信息构建组件。

请注意,这是我的最终xml文件:

<?xml version="1.0" encoding="utf-8" ?>
<data>
<entity tag="player" x="0" y="0">
    <art width="32" height="32" path="assets/images/test.png">
        <animation name="idle" frames="0,1,2" framerate="10" looped="true" />
    </art>
    <component type="MComponent">
        <param name="speed" type="int" value="10"/>
    </component>
</entity>
</data>

我遇到的最令人困惑的问题是需要在代码中的某处引用组件,所以它被编译,在代码中的任何地方都很简单import MyComponent;,但这不是我本能地做的事情。否则,组件不会被编译,也无法实例化。

感谢您的帮助,我希望这可能有助于其他人:),

尼科

哦,嘿,如果有人想要查看我的实体框架,它在这里可用(所有新的xml解析;)):https://github.com/NicoM1/IceEntity