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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Закрытая тема
Старый 07.06.2012, 12:52
viktorami вне форума Посмотреть профиль Отправить личное сообщение для viktorami Найти все сообщения от viktorami
  № 1  
viktorami

Регистрация: Sep 2011
Сообщений: 524
По умолчанию как избежать лишнего создания копии объекта?

пусть в главном классе создан экземпляр class1 в котором приуствует слушатель на собственное событие
Код AS3:
package   
{
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.*;
    public class lentW extends Sprite
    {
        public function class1()  
        {
 
         addEventListener("myCustomEvent", myCustomEventListener);
 
        }
        function myCustomEventListener(event:Event):void
        {
            trace("я услышал событие");
        }
    }
}
в этом же родительском классе создан экземпляр ДРУГОГО класса -class2 ИЗ которого я посылаю событие с помощью dispatchevent

Код AS3:
var lnt:class1=new class1();
 
        public function leftArrayClick(e:MouseEvent):void
        {
        lnt.dispatchEvent(new Event("myCustomEvent"));
class1 его слышит, однако для этого мне приходится создавать еще один его экзмпляр как видите. только для того чтобы отправить целевой dispatchEvent
как этого избежать?

Старый 07.06.2012, 12:56
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 2  
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
ААААААА!! МОИ ГЛАЗА!!!

А если серьёзно, public function class1() это не класс, это функция. Вы видимо совсем запутались. Приводите весь код уж, я плохо понимаю что у вас происходит, второй кусок кода откуда вырван. Чего вы хотите добиться?
Изучать архитектурные вещи можно тщательно изучив синтаксис, вы его не знаете, признайте уже очевидное. Прочитайте Колина Мука уже.
__________________
:)

Старый 07.06.2012, 12:58
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 3  
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Речь про экземпляр class1?
Вообще, всё плохо - события не стоит отправлять "кому-то", куда правильней рассылать от своего имени.

Если 3 класса - родительский, class1 и class2, то лучше всего перебросить событие через родителя вот так:
Код AS3:
a = new class1();
b = new class2();
a.addEventListener('event', b.handler);

Старый 07.06.2012, 13:13
viktorami вне форума Посмотреть профиль Отправить личное сообщение для viktorami Найти все сообщения от viktorami
  № 4  
viktorami

Регистрация: Sep 2011
Сообщений: 524
все сделано для того, чтобы я мог вещать от одного класа- другому. задача стоит: чтобы один класс мог "сказать" напрямую другому- прими данные такие то и так далее.
как тогда это лучше сделать?

Добавлено через 2 минуты
без передачи в один класс(в конструктор) ссылки на другой класс, без использования того факта что все события дублируются на всех уровнях иерархии и оценки их через currenttarget
чтобы один класс мог сказать другому классу: сделай то то! вот, возьми эти данные.

Старый 07.06.2012, 13:17
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 5  
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Посмотрите на пост Тигры.
И классы в as3 не умеют рассылать события. А их экземпляры, если они наследуют все плюшечки EventDispatcher, да.

Короче, экземпляр class1 диспатчит событие, другой экземпляр, который имеет ссылку на этот экземпляр, ловит событие и вызывает хендлер у экземпляра class2, на который в свою очередь тоже имеется ссылка в общем, так сказать, "родителе".
__________________
тут я

Старый 07.06.2012, 13:19
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 6  
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Если Класс1 создал Класс2.
Классу1 нужно сказать что-то Классу2: напрямую дёргаем метод.
Код AS3:
class1:
 
a = new class2();
a.someMethod();
Класс2 нужно сказать что-то Классу1:
Код AS3:
class1:
 
a = new class2();
a.addEventListener('event', trace); //trace - какой-то хэндлер
Код AS3:
class2:
 
dispatchEvent(new Event('event'));
Важно: диспатч событий из конструктора делать нельзя, т.к. в принципе на момент выполнения конструктора у объекта ещё не может быть добавлен слушатель.

Старый 07.06.2012, 13:20
viktorami вне форума Посмотреть профиль Отправить личное сообщение для viktorami Найти все сообщения от viktorami
  № 7  
viktorami

Регистрация: Sep 2011
Сообщений: 524
который имеет ссылку на этот экземпляр
-----------
а как получить внутри класса ССЫЛКУ НА ЭТОТ ЭКЗЕМПЛЯР??? вот в чем проблема!

Старый 07.06.2012, 13:20
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 8  
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
viktorami
Приведите пожалуйста весь код который вы написали для этого теста, а то сейчас вся помощь строится на догадках.

Добавлено через 32 секунды
без ссылки нет взаимодействия, нет ничего плохого в передаче ссылок
__________________
:)

Старый 07.06.2012, 13:22
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 9  
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
В смысле "как"? Вы же не просто вызываете конструктор класса. А пишете вот так?
Код AS3:
a = new class1();
Ну "а" и будет ссылкой.
__________________
тут я

Старый 07.06.2012, 13:23
viktorami вне форума Посмотреть профиль Отправить личное сообщение для viktorami Найти все сообщения от viktorami
  № 10  
viktorami

Регистрация: Sep 2011
Сообщений: 524
dispatchEvent(new Event('event'))

так не работает! уже пробовал. просто dispatchEvent не работает! должна быть указана его цель
targetclass.dispatchEvent(new Event('event'))

Добавлено через 1 минуту
КорДум вот - сразу видно умного и понимающего человека)
об этом и изначально была речь.
если так сделать - все работает!
но вопрос: получается у меня же class1 уже создан эземпляр - тот самый в котором и слушатель прописан
а теперь я вынужден создавать ЕЩЕ ОДНУ ЕГО КОПИЮ КОТОРАЯ БУДЕТ ЖРАТЬ РЕСУРСЫ - ДУБЛЬ КЛАССА
как же так???

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

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

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


 


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


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