在 AS3 中使用 XML 实例化一个 class

Using XML to instantiate a class in AS3

XML 文件:

<MapDetails>
<MapTiles TileWidth="16" TileHeight="16">TestMap1Tiles</MapTiles>

<MapTileFile>TestMap1</MapTileFile>

<Enemy1Class>SkellMonsta</Enemy1Class>

超级简单。我想使用 xml 文件来定义地图中的所有内容。我在我的 GameState class 中正确加载了 xml 文件。一切都很好。 (使用 Flixel,顺便说一句)。

add(map.loadMap(new TestMap1, TestMap1Tiles, mapXML.MapTiles.@TileWidth, mapXML.MapTiles.@TileHeight));

无法使用 mapXML.MapTileFile 来引用 TestMap1。如果我尝试,我会得到这个:

Error #1007: Instantiation attempted on a non-constructor.

如果我尝试像这样引用 SkellMonsta class,也会发生同样的事情:

enemies.add(mapXML.Enemy1Class = new mapXML.Enemy1Class(100, 40, hero));

我试过使用 - as Enemy - 但那不起作用。我在这里错过了什么?

您的问题是您正在尝试使用 xml 中的字符串值,就像 class.

您首先需要获得对实际 class 的引用。您可以使用 flash.utils.getDefinitionByName

此方法将采用字符串引用和 return Class 引用。但请记住,它需要一个完全限定的名称,因此它应该包括任何包引用。所以换句话说,flash.display.Sprite 而不是 Sprite

所以对于你的例子,假设你的敌人 class 是顶级的,你可以这样做:

var cls:Class = getDefinitionByName(getmapXML.Enemy1Class) as Class;

enemies.add(new cls(100, 40, hero));