![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+1 08.07.09]
Регистрация: Mar 2009
Сообщений: 107
|
Доброго времени суток.
Когда нужно полностью выгрузить все созданные объекты в классе для этого надо: 1. Удалить со сцены всех детей. 2. Удалить все зарегистрированные события. Вот содержимое класса. // Создаем несколько контейнеров экземпляра класса Sprite var mySprite1:Sprite = new Sprite(); var mySprite2:Sprite = new Sprite(); var mySprite3:Sprite = new Sprite(); // Создаем несколько событий mySprite1.addEventListener(Event.ENTER_FRAME, myEnterFrame1); mySprite2.addEventListener(Event.ENTER_FRAME, myEnterFrame2); mySprite3.addEventListener(Event.ENTER_FRAME, myEnterFrame3); // Добовляем контейнеры на сцену addChild(mySprite1); addChild(mySprite2); addChild(mySprite3); вопрос:Существует такой же универсальный способ для полного удаления всех зарегистрированных событий? |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Можно указать в третьем аргументе использование слабой ссылки. Тогда отписка произойдет автоматически при удалении ребенка. Но лучше убить в себе лень и отписаться от того, на что подписался.
|
|
|||||
|
[+1 08.07.09]
Регистрация: Mar 2009
Сообщений: 107
|
То есть не существует такого универсального способа?
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Не существует.
|
|
|||||
|
[+1 08.07.09]
Регистрация: Mar 2009
Сообщений: 107
|
Кстати тут еще одна проблема надо же еще всем контейнерам поставить null
Существует какой нибудь универсальный способ как например? |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Нет, не существует. То что создали ручками, надо удалить ручками.
|
|
|||||
|
[+1 08.07.09]
Регистрация: Mar 2009
Сообщений: 107
|
Что-то бред какой-то, для Children же нашли способ, я уверен и тут он тоже есть.
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Удачи
![]() |
|
|||||
|
_etc, а почему нельзя расширяться от какого-нибудь класса, который в свою очередь наследуется от EventDispatcher, и переопределить в нем addEventListener ?
Не уверен насчет быстродействия и идеологической правильности, но все-таки: package{ import flash.display.Sprite; public class MyClass extends Sprite{ private var linkedList:Array = new Array(); public function MyClass(){ super(); } override public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void{ linkedList.push({type:type, listener:listener, useCapture:useCapture, priority:priority, useWeakReference:useWeakReference}); super.addEventListener(type, listener, useCapture, priority, useWeakReference); } public function removeAllEventListeners():void{ for(var i:uint; i < linkedList.length; i++){ super.removeEventListener(linkedList[i].type, linkedList[i].listener, linkedList[i].useCapture); } linkedList = new Array(); } } } P.S Для улучшения производительности можно использовать специальный не динамический класс для копирования в него параметров функции, использовать Dictionary вместо Array для linkedList. |
|
|||||
|
[+1 08.07.09]
Регистрация: Mar 2009
Сообщений: 107
|
__etc просто думает и походу уверен в этом, что если он не знает такого способа, то такого способа просто нет!
alekslitvinenk огромное спасибо, вот это то, что мне было нужно =) |
![]() |
![]() |
Часовой пояс GMT +4, время: 21:10. |
|
|
« Предыдущая тема | Следующая тема » |
|
|