在 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));
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));