Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   помогите разобраться с диспатчером (http://www.flasher.ru/forum/showthread.php?t=169859)

teion 13.10.2011 15:36

помогите разобраться с диспатчером
 
Пытаюсь написать видеоплеер, который должен генерировать события. Наследуется он от Sprite, и что бы он мог отсылать события, его, по идее(Adobe), нужно имплементировать IEventDispatcher. НО, что-то не получается у меня пока.. :( Вот код:

Код AS3:

package ru.a
{
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.EventDispatcher;
        import flash.events.IEventDispatcher;
 
 
        public class videoplayer extends Sprite implements IEventDispatcher
        {
                var disp:EventDispatcher = new EventDispatcher;
 
                public function videoplayer()
                {
                        if (stage)
                        {
                                init();
                        }
                        else
                        {
                                addEventListener(Event.ADDED_TO_STAGE, init);
                        }
                }
 
                private function init(e:Event=null):void
                {
                        trace("videoplayer loaded");
                }
                public function loadvideo() {
                        disp(new Event(CustomEvent));
                        trace("video load start");
                }
 
        }
 
}

ошибки:

Код AS3:

videoplayer.as, Line 30        1180: Call to a possibly undefined method disp.
videoplayer.as, Line 30        1120: Access of undefined property CustomEvent.


Inet_PC 13.10.2011 15:39

Sprite уже реализует интерфейс IEventDispatcher.

Добавлено через 1 минуту
Код AS3:

disp(new Event(CustomEvent));

Так не правильно. Надо:
Код AS3:

this.dispatchEvent(new CustomEvent(CustomEvent.TYPE));


teion 13.10.2011 18:30

Цитата:

Сообщение от Inet_PC (Сообщение 1038898)
Sprite уже реализует интерфейс IEventDispatcher.

Добавлено через 1 минуту
Код AS3:

disp(new Event(CustomEvent));

Так не правильно. Надо:
Код AS3:

this.dispatchEvent(new CustomEvent(CustomEvent.TYPE));


К сожалению, особо ничего не поменялось:

Код AS3:

videoplayer.as, Line 30        1180: Call to a possibly undefined method CustomEvent.
videoplayer.as, Line 30        1120: Access of undefined property CustomEvent.


GBee 13.10.2011 18:48

А у вас есть CustomEvent?

Genzo 13.10.2011 18:53

А вы подключили класс CustomEvent? и вообще вы его создали?

teion 13.10.2011 18:55

Цитата:

Сообщение от Genzo (Сообщение 1038965)
А вы подключили класс CustomEvent? и вообще вы его создали?

все, что в начальном посте написано, это все, что пока есть

Genzo 13.10.2011 19:29

Вы видимо просто скопировали откуда то неполный код , вам необходимо написать собственный класс CustomEvent и т.п. , если вы только обучаетесь попробуйте отлавливать собственные события без расширения класса Event. например так :
Код AS3:

videoplayer.addEventListener('myCustomEventType' , doSmth);
 
---- class videoplayer
 
this.dispatchEvent(new Event('myCustomEventType'));


teion 13.10.2011 21:06

Цитата:

Сообщение от Genzo (Сообщение 1038973)
Вы видимо просто скопировали откуда то неполный код , вам необходимо написать собственный класс CustomEvent и т.п. , если вы только обучаетесь попробуйте отлавливать собственные события без расширения класса Event. например так :
Код AS3:

videoplayer.addEventListener('myCustomEventType' , doSmth);
 
---- class videoplayer
 
this.dispatchEvent(new Event('myCustomEventType'));


не, я его сам целиком написал, просто я пытаюсь найти сконцентрированную схему, как можно выцепить событие из внешнего класса :) Чтоб вот в двух словах по пунктам, что для этого требуется)

Vishapakahr 13.10.2011 21:07

На смотри пример

Код AS3:

package com.mc.events {
        import flash.events.Event;
 
        public class PolygonEvent extends Event {
 
                public var delta:Array;
 
                public static const getArray:String = '';
 
                public function PolygonEvent(type:String, delta:Array = null) {
                        super(type, false, false);
 
                        this.delta = delta;
                        }//end constructor
 
                        override public function clone():Event
                {
                        return new PolygonEvent(this.type, this.delta);
                }
 
                }
 
        }

А сейчас как используем PolygonEvent

Код AS3:

 
var someArr:Array = [0,1,2];
dispatchEvent(new PolygonEvent(PolygonEvent.getArray,someArr));

А там где будешь слушать событие , можешь получать массив через event.delta

Код AS3:

addEventlistener(PolygonEvent.getArray,PolygonEventHandler);
private function PolygonEventHandler(e:PolygonEvent):void{
trace(e.delta);
}

Ну там delta для примера массив , тут может быть что угодно

Добавлено через 34 секунды
Аналогично моего PolygonEvent можешь создать свой CustomEvent


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

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