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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.11.2010, 22:04
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 1  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
По умолчанию Работа с customEvent

Добрался до кастомных событий, решил разобраться в этом вопросе. Но ниче не понял_) Надеюсь поможете :

http://www.flasher.ru/forum/showthread.php?t=79874

По данной ссылке на форуме представляется пример создания своего события. Однако пример не полный по многим вещам. Так и не понятно как задать функционал событию.

Если не сложно покажите примерчик следующего типа :
Создать событийную модель для ( библиотечного) мувиклип-класса, работающую следующим образом : Если координата x клипа = 100 , то выполнить некоторый кастом евент EVENT_100 . ( где EVENT_100 соотв константа)

Заранее спасибо, думаю благодаря такому примеру разберусь

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

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

Код AS3:
//в классе клипа:
if (x === 100) dispatchEvent(new Event(EVENT_100, true));
 
//Где-то в другом классе:
stage.addEventListener(КлассКлипа.EVENT_100, foo);
__________________
тут я


Последний раз редактировалось КорДум; 29.11.2010 в 22:42.
Старый 29.11.2010, 22:58
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 3  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
ну допустим в моем примере так. а когда же нужен кастом ? И тоже с примером желательно. Спасибо

п.с по предидущему посту , хочется именно так
Код AS3:
someClip.addEventListener(MyEvent.SOME_EVENT, onSomeEvent)


Последний раз редактировалось in4core; 29.11.2010 в 23:00.
Старый 29.11.2010, 23:02
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Всю жизнь думал что Custom Event - это "свое" событие, т.е. кастомный класс. Кастомы - это всякие наследники базового Event, со своими особыми свойствами. А передавать разные строки в свойство type - при чем тут кастом? Это стандартное свойство стандартного события. В кастомных вы можете создавать СВОИ свойства, передавая какие-то данные в самом теле события.
Но товарищ in4core смотрит глубже. Он ведь говорит не об объекте события, а о событии как о чем-то "возникающем", и спрашивает, собственно, как сделать чтобы, когда случится х=100 само собой "возникло" событие. Никак. Те события, что генерятся в плеере - генерятся системой или пользователем. У них есть инициатор. Инициатора у х=100 нет. Его придется создавать программно, т.е. следить за координатами объекта, с помощью таймера или ЕНТЕР_ФРЕЙМ, и в условии проверять (см. выше). Если координата х задается объекту программно (ммм... а она может задаваться иначе?...) то можно попробовать переписать сеттер х
Код AS3:
public override function set x (value:Number):void
{
    super.x = value;
    if(value === 100)
    {
        this.dispatchEvent(new Event(EVENT_100));
    }
}
Цитата:
а когда же нужен кастом ?
Ну мало ли.. По большому счету не так уж часто, обычная схема "поймал событие - узнал пославшего - запросил у пославшего данные" чаще всего достаточна. Но иногда не очень удобна. Иногда удобнее данные отдавать в самом событии. Допустим у Вас есть меню, в нем десяток кнопок. Кнопки при нажатии генерят события MouseEvent. Их ловит меню, но меню то отчитывается перед кем-то "выше", и совсем необязательно меню и тот кто выше - дисплейные объекты, это могут быть менеджеры. Т.е. всплытие событий их не касается. Тот кто выше - хочет получать от меню событие "выбрали такой-то пункт". Т.е. событие "Выбрали_пункт", у которого есть свойство - "идентификаторПункта".
Код AS3:
package 
{
    import flash.events.Event;
 
        public class MenuEvent extends Event 
    {
        static public const ACTION_SELECT:String = "actionSelect";
        public var actionID:String;
        public function MenuEvent(type:String, actionID:String, bubbles:Boolean=false, cancelable:Boolean=false) 
        { 
            super(type, bubbles, cancelable);
            this.actionID = actionID;
        } 
 
        public override function clone():Event 
        { 
            return new MenuEvent(type, actionID, bubbles, cancelable);
        } 
 
        public override function toString():String 
        { 
            return formatToString("MenuEvent", "type", "actionID", "bubbles", "cancelable", "eventPhase"); 
        }
    }
}
Код AS3:
_menu.addEventListener(MenuEvent.ACTION_SELECT, onActionSelect);
...
private function onActionSelect(event:MenuEvent):void
{
    trace( event.actionID );
}
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 29.11.2010 в 23:31.
Старый 29.11.2010, 23:24
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 5  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
@Wolsh, Браво! Все по-уму =)

Цитата:
"поймал событие - узнал пославшего - запросил у пославшего данные"
обычная pull - система.

Цитата:
Иногда удобнее данные отдавать в самом событии.
Также обычная push - система.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Ну и в _menu собственно

Код AS3:
private function onClick(event:MouseEvent):void
{
    // допустим есть _idHolder:Dictionary который хранит привязанные к кнопкам actionID
   var actionID:String = _idHolder[event.currentTarget];
   this.dispatchEvent(new MenuEvent(MenuEvent.ACTION_SELECT, actionID));
}
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 29.11.2010 в 23:35.
Старый 30.11.2010, 00:12
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 7  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
Больше спасибо все разжевано как надо!

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

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

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


 


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


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