Просмотр полной версии : Как создать событие onEnterFrame2 или onRollOver2
есть предопределенные события, на прослушивание которых уже подписаны объекты. а вот как создать свое событие, дубликат уже имеющегося.
ну если с onEnterFrame еще хоть как то понятно, можно создать клип и ему на onEnterFrame повесить бродкаст onEnterFrame2. хотя это будет, наверное, уже событие конкретного клипа, а не самостоятельно событие происходящее каждый кадр.
а вот что делать с onRollOver ?
Встречный вопрос -- зачем?
ну например проигрывание мувик задом наперед лучше и проще делать на onEnterFrame, а не на интервалах например. а если у нас уже что-то повещено на onEnterFrame клипа который нужно проиграть назад?
те же самые альты на кнопках. на onRollOver обычно что нить типа смены цвета фона.
просто решил стандартные вещи типа вышеописанных повынасить в классы. и тут столкнулся с переопределением функций. вот ищу способ дублировать событие.
События дублировать нельзя. Просто по порядку на onRollOver вызывай необходимые функции.
RandomUser
14.06.2006, 15:46
oldEnterFrame=onEnterFrame;
newEnterFrame=function() {
trace("newEnterFrame");
oldEnterFrame();
}
onEnterFrame=newEnterFrame;
Что-то в этом роде....
Написать N-ое количество функций выполняющих нужные действие. По мере надобности заносить функции в массив. Запустить один onEnterFrame, которые проходит по массиву и запускает указанные функции.
2 RandomUser
если удалить он_ентер_фраме удалится все - не подходит.
2 __etc
но можно же создовать собственные? можно наверно как то подвесить собсвенное событие на выполнение синхронно с имеющимся?
Нет, нельзя. Не удаляй onRollOver, удаляй сторонние функции или лучше делай список функций для вызова, в onRollOver вызывай одну за другой. При необходимости, функцию можно удалить из списка.
а Delegate там или EventDispatcher никак не помогут ? (((
а Delegate там или EventDispatcher никак не помогут ? (((
Вам поможет чтение топика номер 6.
а Delegate там или EventDispatcher никак не помогут ? (((
Хм, у тебя есть хоть какое-нибудь представление, что делают данные классы?
Впрочем, прочитай пост №6 или №8
ты можешь создать класс, наследник мувиклипа.
повесить туда рассылку событий типа
private function onEnterFrame ():Void
{
dispatchEvent({type:'enterFrame1'});
dispatchEvent({type:'enterFrame2});
}
хотя в случае с EventDispatcher это уже не нужно, ибо можно подписывать обработчики событий, достаточно легко.
2 Nirth
а примерчик можно, а то уже совсем ничего не понимаю.
какой примерчик? создаешь класс, в нем создаешь свой он интер фрейм, и подписываешь нужные обработчики.
почитай в хелпе про EventDispatcher
я его и читаю
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();
сори - работает
только как мне туда onEnterFrame впихнуть?
Хм, только нафига подписывать самого себя на свои же события...
единственное чего получилось добиться это
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
-
+
+
+
господи, как ты читаешь хелп?
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 запускать лень, поэтому не проверял, чуть позже верифайну.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.