Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как создать событие onEnterFrame2 или onRollOver2 (http://www.flasher.ru/forum/showthread.php?t=81196)

etc 14.06.2006 17:15

Цитата:

Сообщение от Stone
а Delegate там или EventDispatcher никак не помогут ? (((

Хм, у тебя есть хоть какое-нибудь представление, что делают данные классы?
Впрочем, прочитай пост №6 или №8

Nirth 14.06.2006 17:31

ты можешь создать класс, наследник мувиклипа.
повесить туда рассылку событий типа
Код:

private function onEnterFrame ():Void
{
    dispatchEvent({type:'enterFrame1'});
    dispatchEvent({type:'enterFrame2});
}

хотя в случае с EventDispatcher это уже не нужно, ибо можно подписывать обработчики событий, достаточно легко.

Stone 14.06.2006 18:03

2 Nirth
а примерчик можно, а то уже совсем ничего не понимаю.

Nirth 14.06.2006 18:06

какой примерчик? создаешь класс, в нем создаешь свой он интер фрейм, и подписываешь нужные обработчики.
почитай в хелпе про EventDispatcher

Stone 14.06.2006 18:15

я его и читаю

Код:

import mx.events.EventDispatcher;
class MyMC extends MovieClip {
        //Создаем методы которые нам передаст EventDispatcher,
        private var dispatchEvent:Function; //Данный метод будет вещать события
        public var addEventListener,removeEventListener:Function; //Данные два метода будут подписывать и удалять слушатели
        public var onMove:Function; // А это наше будущее событие
        public function MyMC () {
                EventDispatcher.initialize(this); //данный метод класса EventDispatcher передает нам методы для вещания и добавления листенеров
                this.addEventListener('onMove',this); // подписываем себя на событие
        }
        public function move(x:Number,y:Number) {
              _x=x;
              _y=y:
              dispatchEvent({type:'onMove',xp:x,yp:y}); //вещаем событие с двумя параметрами(новые координаты
        }
}

вот только запустить не могу (

Код:

test=new MyMC();

test.onMove=function(){
        trace('+')
}

test.move();


Stone 14.06.2006 18:18

сори - работает

только как мне туда onEnterFrame впихнуть?

etc 14.06.2006 18:24

Хм, только нафига подписывать самого себя на свои же события...

Stone 14.06.2006 18:58

единственное чего получилось добиться это

Код:

import mx.events.EventDispatcher;
import mx.utils.Delegate;
class MyMC extends MovieClip {
        //Создаем методы которые нам передаст EventDispatcher,
        private var dispatchEvent:Function; //Данный метод будет вещать события
        public var addEventListener,removeEventListener:Function; //Данные два метода будут подписывать и удалять слушатели
        public var onMove:Function; // А это наше будущее событие
        public function MyMC () {
                EventDispatcher.initialize(this); //данный метод класса EventDispatcher передает нам методы для вещания и добавления листенеров
                this.addEventListener('onMove',this); // подписываем себя на событие
                                MovieClip.prototype.onEnterFrame=Delegate.create(this, _onEnterFrame);
        }
               

               
        public function _onEnterFrame() {
              dispatchEvent({type:'onMove'});
              }
               
               
}

Код:

import MyMC;
this.attachMovie('MyMC','mc',_root.getNextHighestDepth());

mc.onMove=function(){
        trace('+')
}

mc.onEnterFrame=function(){
        trace('-');
}

вот только в OUTPUT

-
+
+
+

Nirth 14.06.2006 19:12

господи, как ты читаешь хелп?
Код:

import mx.events.EventDispatcher;
class EventDispatcherExample extends MovieClip {
    public var addEventListener:Function, removeEventListener:Function, dispatchEvent:Function;
    public function EventDispatcherExample()
    {
        EventDispatcher.initialize(this);
    }
    private function onEnterFrame():Void
    {
        dispatchEvent({type:'enterFrame'});
    }
}

используем
Код:

function firstHandler(event:Object):Void
{
    trace("enter frame1");
}
function secondHandler(event:Object):Void
{
    trace("enter frame 2");
}

myEventDispatcherExampleInstance.addEventListener("enterFrame",firstHandler);
myEventDispatcherExampleInstance.addEventListener("enterFrame",secondHandler);

Flash запускать лень, поэтому не проверял, чуть позже верифайну.


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

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