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

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

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

Регистрация: Jun 2010
Сообщений: 120
Цитата:
Сообщение от alatar
На оба вопроса: потому, что ни разу не подписались на stage.
На оба вопроса: Можно поймать событие, если подписаться у stage на capture фазу и кликнуть mc.
Вы имеете ввиду так:

Код AS3:
stage.addEventListener(MouseEvent.CLICK, handler, true)
mc.addEventListener(MouseEvent.CLICK, handler, false);
Рассмотрим такой случай. Я изложу ход своих мыслей, а вы подправьте если я не прав.

Код AS3:
stage.addEventListener(MouseEvent.CLICK, handler, false)
mc.addEventListener(MouseEvent.CLICK, handler, false);
 
function handler(e:MouseEvent): 
{
     trace("eventPhase : " + e.eventPhase + ", currentTarget : " + e.currentTarget.name +   
    ", target : " + e.target.name + ", type : " + e.type);
}
Кликаем по stage в output выводит:
eventPhase : 2, currentTarget : null, target : null, type : click

Кликаем по mc в output выводит:
eventPhase : 2, currentTarget : mc, target : mc, type : click
eventPhase : 3, currentTarget : null, target : mc, type : click


Я думаю по этому поводу следующее.
Кликая по stage получателем события яв-ся stage, т.к. у stage нет предков. Что верно отображается в output, где указана, что handler запустился на target фазе. Идем дальше. Обработчик события подписанный на stage продолжает свою работу и доходит до своих потомков, т.е. до mc в bubbles фазе. На этом обработчик стейджа заканчивает свою работу. Далее кликая по mc, выполняется обработчик mc.
Он уведомляет о событии stage на capture, но handler не запускается. Далее на target фазе для mc выполняется обработчик mc. На bubbles фазе этот же handler mc делает уведомление своему предку stage о том, что mc обработал событие. На этом заканчивается работа.

Старый 21.09.2011, 13:44
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 2  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Он уведомляет о событии stage на capture, но handler не запускается.
На capture фазу создается отдельных обработчик, поэтому хендлер не срабатывает.
Цитата:
Обработчик события подписанный на stage продолжает свою работу и доходит до своих потомков, т.е. до mc в bubbles фазе. На этом обработчик стейджа заканчивает свою работу.
Если кликнуть по stage, событие больше никуда не пойдет. bubbles фаза идет от target к stage, а не наоборот.
Цитата:
Далее кликая по mc, выполняется обработчик mc.
Он уведомляет о событии stage на capture, но handler не запускается. Далее на target фазе для mc выполняется обработчик mc. На bubbles фазе этот же handler mc делает уведомление своему предку stage о том, что mc обработал событие. На этом заканчивается работа.
Сначала выполнится обработчик на stage, если он с useCapture = true. Потом обработик mc в target фазе. Потом обработчик на stage (bubbles фаза), если он с useCapture = false.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 21.09.2011, 14:01
goldlider вне форума Посмотреть профиль Отправить личное сообщение для goldlider Найти все сообщения от goldlider
  № 3  
Ответить с цитированием
goldlider

Регистрация: Jun 2010
Сообщений: 120
Цитата:
Сообщение от alatar Посмотреть сообщение
Сначала выполнится обработчик на stage, если он с useCapture = true. Потом обработик mc в target фазе. Потом обработчик на stage (bubbles фаза), если он с useCapture = false.
Если у обработчика stage useCapture = true, то и обработчик stage и обработчик mc сработают в target фазе.
Если у обработчика stage useCapture = false, то сработают одновременно оба обработчика, вначале mc на target, затем stage на bubbles. Не так ли ?

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Не совсем.
Код AS3:
package
{
    import flash.display.Graphics;
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.EventPhase;
    import flash.events.MouseEvent;
 
    [SWF(width="1024", height="768")]
 
    public class ABCTest extends Sprite
    {
        public function ABCTest()
        {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
 
            var mc:Sprite = new Sprite();
            draw(mc.graphics);
 
            addChild(mc);
 
            mc.addEventListener(MouseEvent.CLICK, mc_clickHandler);
            stage.addEventListener(MouseEvent.CLICK, stage_clickHandler, true);
            stage.addEventListener(MouseEvent.CLICK, stage_clickHandler);
        }
 
        private function mc_clickHandler(event:MouseEvent):void
        {
            trace("mc click");
        }
 
        private function stage_clickHandler(event:MouseEvent):void
        {
            switch (event.eventPhase)
            {
                case EventPhase.AT_TARGET:
                    trace("stage target phase");
                    break;
                case EventPhase.CAPTURING_PHASE:
                    trace("stage capturing phase");
                    break;
                case EventPhase.BUBBLING_PHASE:
                    trace("stage bubbling phase");
                    break;
            }
        }
 
        private function draw(g:Graphics):void
        {
            g.beginFill(0xFFFF00);
            g.drawRect(0,0,100,100);
            g.endFill();
        }
    }
}
Кликаем по stage. В консоли
Цитата:
stage target phase
Кликаем по mc. В консоли
Цитата:
stage capturing phase
mc click
stage bubbling phase
__________________
משיח לא בא
משיח גם לא מטלפן

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

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

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


 


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


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