我有一個引擎,我創建了一個基於XML數據將對象加載到容器中的對象。該XML的一個非常簡單的例子是這樣的:在AS3中通過字符串訪問屬性
<level>
<object cname="enemies.Robot">
<pos x="200" y="400" layer="mobiles" />
</object>
<object cname="Player">
<pos x="12" y="89" layer="mobiles" />
</object>
</level>
我有一個類環境,有一個方法loadLevel(數據:XML)我通過解析XML,那麼函數通過運行XML查找所有對象節點並使用getDefinitionByName來確定基於對象要創建哪個對象。@ cname。
從這裏,我必須像這樣手動定義基於XML的每個屬性;
obj.x = [email protected];
obj.y = [email protected];
等
我想知道是否有設置基於字符串的屬性的內置方法。我的意思是像這樣:
var mc:MovieClip = new MovieClip();
mc.someInbuiltFunctionThatSetsAProperty("alpha", 0.5);
這樣我可以改變我的XML更喜歡這樣:
<object cname="Player">
<props>
<x>200</x>
<y>221</y>
<alpha>7834</alpha>
<health>Something</health>
<power>3</power>
</props>
</object>
並通過對道具設置所有的所有的孩子重複我的在飛行中的屬性。
我知道,如果我在其中創建一個對象和設置屬性,像這樣:
var obj:Object =
{
var1: "hello",
var2: "there",
name: "marty"
};
,你可以通過名稱/值使用for(String in Object)
環這樣便重複:
var i:String;
for(i in obj)
{
trace(i + ": " + obj[i]);
}
/**
* Output:
* var1: hello
* var2: there
* name: marty
*/
有沒有類似的東西?
肯定有辦法,因爲這裏是一個使用字符串標識屬性的示例:
var ar:Array = [new MovieClip(), new MovieClip()];
ar.sortOn("alpha", Array.ASCENDING);
所以只是爲了讓我的問題更多了點:我希望能夠獲取和設置屬性,我可以識別使用字符串。
瘋了。我構建了類似的東西,除了我的節點名稱是類名稱和屬性值(例如' flos.gui.GUIControl>解析爲DisplayObjectContainers的XML節點允許孩子要處理和添加的節點,並且任何節點都可以有特殊的子節點'道具'和'構造函數'。 –
Triynko
2014-01-22 08:43:45
道具節點需要一組命名屬性,以便將子節點構建爲類型化對象並將其分配給這些屬性,如下所示:' ',這樣就可以實例化和分配「props」的子節點,以便在props節點的「names」屬性中指定的「名稱」列表支持類型名稱別名例如,我可以用「rect」代替「flash.display.Rectangle」。 –
Triynko
2014-01-22 08:47:14
它還支持構造子節點'<構造函數0 =「」3 =「」> constructor>',它構建一個數組對象,該對象將通過getDefinitionByName + Class對象傳遞給構造函數,以及一個輔助函數,該函數硬編碼20個不同的路徑用1到20個構造函數參數構造類(因爲你不能只在Class對象上調用「apply」)。所有屬性也被智能處理,它檢查hasOwnProperty,自動解釋數字並自動解析爲已知屬性的強類型。 –
Triynko
2014-01-22 08:50:20