Мне кажется, что вы сделали это тяжело для себя. Я могу ошибаться, так как трудно пройти через код, который вы представили. Концепция списка воспроизведения XML и нажатия на экранный объект для воспроизведения звуков довольно проста, и я продемонстрирую это.
XML
<?xml version="1.0" encoding="utf-8"?>
<xml>
<item title="Song 1" path="audio/song1.mp3" />
<item title="Song 2" path="audio/song2.mp3" />
<item title="Song 3" path="audio/song3.mp3" />
<item title="Song 4" path="audio/song4.mp3" />
<item title="Song 5" path="audio/song5.mp3" />
<item title="Song 6" path="audio/song6.mp3" />
</xml>
Код ActionScript 3
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
public class DocumentClass extends Sprite
{
private var _urlLoader:URLLoader;
private var _urlRequest:URLRequest;
private var _xml:XML;
private var _xmlList:XMLList;
public function DocumentClass():void
{
_urlLoader = new URLLoader();
_urlRequest = new URLRequest();
_urlRequest.url = 'path/to/playlist.xml';
_urlLoader.addEventListener(Event.COMPLETE, onXMLLoaded);
_urlLoader.load(_urlRequest);
}
private function onXMLLoaded(e:Event):void
{
_xml = new XML(e.target.data);
_xmlList = new XMLList(_xml.item);
//We use the index in the XML object as its ID. (The XML object/List is an array);
for(var i:int = 0; i < _xmlList.length(); i++)
{
var s:MovieClip = new MovieClip();
addChild(s);
s.mouseChildren = false;
var tf:TextField = new TextField();
tf.text = _xmlList[i].@title;
tf.y = i * 12 + 20; //Seperates the textfields by 12 px starting at y:20;
s.path = _xmlList[i].@path;
s.addChild(tf);
s.addEventListener(MouseEvent.MOUSE_DOWN, onSDown);
}
}
private var onSDown(e:MouseEvent):void
{
var s:Sound = new Sound(new URLRequest(e.target.path));
s.play();
}
}
}
Итак, мы загружаем XML в наш класс документов. Мы перебираем xml length (); много раз, то есть сколько детей в объекте XML. Для каждого цикла или дочернего элемента мы создаем MovieClip, добавляем в него текстовое поле, маркируем текстовое поле, затем добавляем свойство «path» (xmlList [int]. @ Path) к содержащему мувиклипу со значением этого текущего Атрибут пути ребенка от XML. MouseEvent относится к мувиклипу, и мы сообщаем текстовому полю внутри, что он не получает ввод от мыши.
Я надеюсь, что это помогает, оборачивая текст в мувиклип, мы можем добавить к нему свойства, к которым может получить доступ метод события через цель, которая является s.