0

XMLの各ノードのステージにムービークリップを追加するforEachループを使用しています。ループに追加されるときに、これらのムービークリップに一意のインスタンス名を付けるにはどうすればよいですか?

これが私のparseList関数で、前述のforEachループと、使用している構文が機能していません。

private function parseList():void {
    //use Number variables to keep track of current x and y properties as list display is generated
    var titleField:TextField = TextField(listItem);
    var itemY:Number = 503;
    var itemX:Number = 0;
    var artistTracker:String = Playmaster_Jukebox.currArtist;
    var artID = 0;
    var albID = 0;

    var itemID:Number=0;
    for each (var listItemData:XML in mainXML.artist[artID].album[albID].track) {

        var listItem:MovieClip = new ListItem(itemTitle);
        listContainer.addChild(listItem);
        listItem.name = "itemID" + " " + albID + " " + itemID;
        itemID++;

        listItem.y = itemY;
        listItem.x = itemX;

        TextField(listItem.listItemTitleField);
        itemY += listItem.height + 10;
    }
}

私はforEachループの初心者ですが、まだ理解していないので、コメントをいただければ幸いです。

4

1 に答える 1

0

あなたの質問を正しく理解できれば; 次に、XML ドキュメントから読み取る際に、"listItem" MovieClip を保存する方法を尋ねています。

これを行うには、おそらく配列またはマップのいずれかを使用する必要があります。

配列の使用例:

var listItemArray:Array = new Array();
for each (var listItemData:XML in mainXML.artist[artID].album[albID].track) {
        var listItem:MovieClip = new ListItem(itemTitle);
        listContainer.addChild(listItem);

        listItemArray.push(listItem);// adds the item to the array
}

マップの使用例:

var listItemMap:Object = {};
for each (var listItemData:XML in mainXML.artist[artID].album[albID].track) {
         var listItem:MovieClip = new ListItem(itemTitle);
         listContainer.addChild(listItem);
         listItem.name = "itemID" + " " + albID + " " + itemID;

         listItemMap[listItem.name];// adds an item by the .name you created for it.
}

マップでは、さまざまなアイテムに付けた名前でアイテムを検索することもできます。つまり、listItemMap["name"] は、"name" という名前の要素を検索します。

配列を使用すると、それらを順番にループできます。つまり、listItemArray[0] は最初の要素を見つけます。

どちらが目的に適しているかを決めるのはあなた次第です。

于 2013-03-24T08:30:13.807 に答える