- 0
Удаление eventListeners после прохода через for
Знатоки флеша и Action Script, помогите решить задачку... Картинки в игру добавляются динамически, из данных в XML-файле. Таким же образом добавляются и клетки для них, в которые эти самые картинки нужно перетащить. Поскольку количество используемых картинок на каждом уровне произвольно и берется через FOR, путём подсчета соответствующих веток в XML-коде столкнулся с проблемой того, что при переходе на другой фрейм или новом старте не получается убрать event listeners. Проблема связана с динамическим добавлением картинок. После добавления через for, максимум что получается, так это убрать последнюю из добавленных картинок. Помогите решить задачу.
//loading xml and images and adding them on the stage
function fileLoaded(event:Event):void {
myXML=XML(event.target.data);
trace(myXML.game[trueGame].images.image);
xmlList=myXML.game[trueGame].images.image;
// Adding cells for puting images into them
for (var k:int=0; k<xmlList.length(); k++) {
window=new UILoader();
window.x=(100*k)+20*k+50;
window.y=250;
window.source=xmlList[k].attribute("window");
window.name="window"+k;
allBoxesNames[boxNum]=window.name;
boxNum++;
stage.addChild(window);
}
// Adding draging images to stage
for (var i:int=0; i<xmlList.length(); i++) {
placeId[i]=xmlList[i].attribute("place");
trace(placeId[i]);
loadPic= new UILoader();
loadPic.x=100*(i+1);
loadPic.y=400;
loadPic.source=xmlList[i].attribute("name");
loadPicArray[i]=loadPic;
loadPic.name="loadPic"+i;
allNames[number]=loadPic.name;
number++;
loadPic.addEventListener(MouseEvent.MOUSE_DOWN, drag);
loadPic.addEventListener(MouseEvent.MOUSE_UP, drop);
loadPic.addEventListener(MouseEvent.MOUSE_UP, hitCheck);
trace(stage.addChild(loadPic));
stage.addChild(loadPic);
}
3 ответа:
-
- 1
Вики-ответПочему только последнюю? Я вижу в коде массив loadPicArray, судя по всему глобальный. Тогда может как-то так?
function removePictListeners():void { for (var i:int = 0; i < loadPicArray.length; i++) { loadPicArray[i].removeEventListener(MouseEvent.MOUSE_DOWN, drag); loadPicArray[i].removeEventListener(MouseEvent.MOUSE_UP, drop); loadPicArray[i].removeEventListener(MouseEvent.MOUSE_UP, hitCheck); } }И вызывать это в тех местах, где нужно почистить лисенеры?
А вообще, в давно начавшуюся эпоху AS3 код во фреймах - архаичное зло, за которое нужно больно бить по рукам.
-
- 1
Ну если разумных людей, то никого лучше Колина Мука предложить не могу. Его книги Essential ActionScript 3.0 вполне достаточно, чтобы понять все фишки AS3. А их там, по сравнению с AS2, много. В частности, вместо кадров код пишется в классах. Точка входа - конструктор класса документа (говорю о Flash, во Флексе ещё не копался).
Если надо, могу написать статейку небольшую, в которой будут показаны основы обращения с AS3 во Flash.
-
- 0
Снова я всё напутал. Проблема была не с удалением event listeners, а как раз с удалением самих динамических объектов... Картинки и ячейки для них, которые мы взяли из XML и закинули на уровень с помощью "For".
var delPic:Object; function removeAllListener():void { //urlLoader.removeEventListener(Event.COMPLETE,fileLoaded); for (var x:int=0; x<loadPicArray.length(); x++) { //trace(loadPicArray[x]); var delPic:Object=loadPicArray[x]; //this.parent.removeChild(this.parent.parent); if (delPic != null) { delPic.parent.removeChild(delPic); } } }Не хочет паразит убирать их и всё.
А можно поподробней о кодинге вне фреймов? Где же тогда можно ещё писать код? Расскажите, как сегодня принято работать. Мы в процессе освоения Action Scripta, поэтому пока не поздно, готовы впитывать любую полезную информацию и внимать речам разумных людей.