Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 03.06.2009, 23:03
vvvvvvf вне форума Посмотреть профиль Отправить личное сообщение для vvvvvvf Найти все сообщения от vvvvvvf
  № 1  
Ответить с цитированием
vvvvvvf
[+1 08.07.09]

Регистрация: Mar 2009
Сообщений: 107
По умолчанию Удаление всех зарегистрированных событий в классе

Доброго времени суток.
Когда нужно полностью выгрузить все созданные объекты в классе
для этого надо:
1. Удалить со сцены всех детей.
2. Удалить все зарегистрированные события.

Вот содержимое класса.
Код AS3:
	// Создаем несколько контейнеров экземпляра класса 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);
Далее нужно полностью освободить класс от всех детей находящихся на сцене, для этого я использую такой способ.
Код AS3:
	while (this.numChildren > 0) {
		this.removeChildAt(0);
	}
вопрос:Существует такой же универсальный способ для полного удаления всех зарегистрированных событий?

Старый 03.06.2009, 23:52
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Можно указать в третьем аргументе использование слабой ссылки. Тогда отписка произойдет автоматически при удалении ребенка. Но лучше убить в себе лень и отписаться от того, на что подписался.

Старый 03.06.2009, 23:54
vvvvvvf вне форума Посмотреть профиль Отправить личное сообщение для vvvvvvf Найти все сообщения от vvvvvvf
  № 3  
Ответить с цитированием
vvvvvvf
[+1 08.07.09]

Регистрация: Mar 2009
Сообщений: 107
То есть не существует такого универсального способа?

Старый 03.06.2009, 23:55
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Не существует.

Старый 04.06.2009, 00:08
vvvvvvf вне форума Посмотреть профиль Отправить личное сообщение для vvvvvvf Найти все сообщения от vvvvvvf
  № 5  
Ответить с цитированием
vvvvvvf
[+1 08.07.09]

Регистрация: Mar 2009
Сообщений: 107
Кстати тут еще одна проблема надо же еще всем контейнерам поставить null
Код AS3:
	mySprite1 = null;
	mySprite2 = null;
	mySprite3 = null;
Существует какой нибудь универсальный способ как например?

Код AS3:
	while (this.numChildren > 0) {
		this.removeChildAt(0);
	}

Старый 04.06.2009, 00:12
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Нет, не существует. То что создали ручками, надо удалить ручками.

Старый 04.06.2009, 00:19
vvvvvvf вне форума Посмотреть профиль Отправить личное сообщение для vvvvvvf Найти все сообщения от vvvvvvf
  № 7  
Ответить с цитированием
vvvvvvf
[+1 08.07.09]

Регистрация: Mar 2009
Сообщений: 107
Что-то бред какой-то, для Children же нашли способ, я уверен и тут он тоже есть.

Старый 04.06.2009, 00:23
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Удачи

Старый 04.06.2009, 00:32
alekslitvinenk вне форума Посмотреть профиль Отправить личное сообщение для alekslitvinenk Посетить домашнюю страницу alekslitvinenk Найти все сообщения от alekslitvinenk
  № 9  
Ответить с цитированием
alekslitvinenk
 
Аватар для alekslitvinenk

Регистрация: Oct 2005
Адрес: Москва
Сообщений: 491
Отправить сообщение для alekslitvinenk с помощью ICQ Отправить сообщение для alekslitvinenk с помощью AIM Отправить сообщение для alekslitvinenk с помощью Skype™
_etc, а почему нельзя расширяться от какого-нибудь класса, который в свою очередь наследуется от EventDispatcher, и переопределить в нем addEventListener ?
Не уверен насчет быстродействия и идеологической правильности, но все-таки:

Код AS3:
 
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.

Старый 04.06.2009, 00:37
vvvvvvf вне форума Посмотреть профиль Отправить личное сообщение для vvvvvvf Найти все сообщения от vvvvvvf
  № 10  
Ответить с цитированием
vvvvvvf
[+1 08.07.09]

Регистрация: Mar 2009
Сообщений: 107
__etc просто думает и походу уверен в этом, что если он не знает такого способа, то такого способа просто нет!

alekslitvinenk огромное спасибо, вот это то, что мне было нужно =)

Создать новую тему Ответ Часовой пояс GMT +4, время: 21:09.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 21:09.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.