我正在将实体解析为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()函数,有人知道怎么做吗?
谢谢,
尼科
答案 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