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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 24.01.2012, 15:11
carrotoff вне форума Посмотреть профиль Отправить личное сообщение для carrotoff Найти все сообщения от carrotoff
  № 11  
Ответить с цитированием
carrotoff
 
Аватар для carrotoff

Регистрация: May 2010
Сообщений: 543
Цитата:
Сообщение от Stitch512 Посмотреть сообщение
Цитата:
Расскажите, как Вы ловите клик по объекту, не подписываясь на MouseEvent?
Я и не говорил что не подписываться. Кнопку и все необходимые данные помещаем в класс-контейнер, в нем подписываемся на MouseEvent по нему шлем события к примеру ButtonClick с нужными данными, по сути MouseEvent получается инкапсулировано и извне видно только событие данного контейнера. Если потом внутренняя логика поменяется - вместо кнопки какая то анимация, либо пользовательская кнопка у которой другая логика работы, или что угодно, то это эти изменения будут только внутрение.
Какой-то странный подход. А чем MouseEvent то не угодил? Зачем дублировать события? Есть замечательный принцип: "Не следует множить сущее без необходимости".

Код AS3:
class MyClass extends Sprite{
   public var param:int = 1;
   public function MyClass(){
   ...
   }
}
....
 
var btn:MyClass = new MyClass();
btn.addEVentListener(MouseEvent.CLICK, _onClick);
...
 
private function _onClick(e:MouseEvent):void{
   trace((e.currentTarget as MyClass).param);
}
__________________
Вы грабите бедных людей. Парень со свирелью накажет вас. Хонгильдон (с)

Старый 24.01.2012, 15:24
Stitch512 вне форума Посмотреть профиль Отправить личное сообщение для Stitch512 Найти все сообщения от Stitch512
  № 12  
Ответить с цитированием
Stitch512

Регистрация: Nov 2010
Сообщений: 150
А еще есть понятие "уменьшение зависимостей".
http://www.flasher.ru/forum/showthread.php?t=174189
Вот к примеру. Если MyClass заменить на GameButton, то не факт что MouseEvent.CLICK будет приходить правильно, и тем более не сработает конструкция e.currentTarget as MyClass. А изменение графического контента - довольная частая ситуация. Но если вместо этого отсылать событие ButtonClick к примеру, то подмена кнопок на остальной код не повлияет, главное чтобы эта кнопка также отсылала нужное событие.
Я не хочу сказать что так прям всегда нужно делать, но при необходимости это имеет место быть.


Последний раз редактировалось Stitch512; 24.01.2012 в 15:27.
Старый 24.01.2012, 15:32
carrotoff вне форума Посмотреть профиль Отправить личное сообщение для carrotoff Найти все сообщения от carrotoff
  № 13  
Ответить с цитированием
carrotoff
 
Аватар для carrotoff

Регистрация: May 2010
Сообщений: 543
Цитата:
Сообщение от Stitch512
Вот к примеру. Если MyClass заменить на GameButton, то не факт что MouseEvent.CLICK будет приходить правильно
С чего это вдруг?
Читаем доки:
Цитата:
currentTarget - Объект, активно обрабатывающий объект Event с помощью прослушивателя событий.
Кто подписался на событие, на того и получите ссылку. e.currentTarget as MyClass - частный случай
__________________
Вы грабите бедных людей. Парень со свирелью накажет вас. Хонгильдон (с)

Старый 24.01.2012, 15:44
Stitch512 вне форума Посмотреть профиль Отправить личное сообщение для Stitch512 Найти все сообщения от Stitch512
  № 14  
Ответить с цитированием
Stitch512

Регистрация: Nov 2010
Сообщений: 150
Событие то будет правильно приходить, но если поверх главного спрайта лежат другие (слои состояний кнопок) то событие придет им. Можно им поставить mouseEnabled = false, но это частный случай решения проблемы, в любом случае есть вероятность что currentTarget будет отличаться.
Цитата:
e.currentTarget as MyClass - частный случай
Вот я как раз и привел пример как сделать чтобы не было частных случаев.
И вообще, чем так не угодили кастомные события)

Старый 24.01.2012, 20:43
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 15  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
есть вероятность что currentTarget будет отличаться.
Не было и нет таких вероятностей. Читайте справку.
Цитата:
Вот я как раз и привел пример как сделать чтобы не было частных случаев.
Вы привели лишь другой пример частного случая. Причем автор топика спрашивал буквально, "как узнать по какой кнопке кликнули", и при чем тут кастомные события, посылаемые вверх контейнером этих кнопок, Вы так и не ответили. Вопрос был на уровне "узнать в контейнере". Может быть товарищу вовсе не нужно никуда выше никаких событий диспатчить. У него общий для всех ситуаций случай. У Вас - частное решение о том, что делать потом.
Цитата:
И вообще, чем так не угодили кастомные события)
Всему есть свое место и время. Где-то они необходимы, где-то – удобны. Чаще всего они не нужны и ими пытаются разрулить ошибки архитектуры. Но к данному вопросу они просто не имеют никакого отношения.
__________________
Reality.getBounds(this);

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

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

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


 


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


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