Я давно изучал пользовательское событие (слушателей), но так и не смог его создать.Существует так много разных методов, расширяющих класс Event, но также расширяющих класс EventDispatcher, что очень сбивает с толку!Я хочу закончить с этим раз и навсегда и изучить соответствующую технику.
package{
import flash.events.Event;
public class CustomEvent extends Event{
public static const TEST:String = 'test'; //what exac is the purpose of the value in the string?
public var data:Object;
public function CustomEvent(type:String, bubbles:Boolean = false, cancelable:Boolean = false, data:Object = null):void
{
this.data = data;
super();
}
}
}
Насколько я знаю, должен быть создан специальный класс, в котором вы устанавливаете требования для события, которое должно быть отправлено:
package
{
import flash.display.MovieClip;
public class TestClass extends MovieClip
{
public function TestClass():void {
if (ConditionForHoldToComplete == true) {
dispatchEvent(new Event(CustomEvent.TEST));
}
}
}
}
Я не уверен, что это правильно, но должно быть что-то вроде этого.
Теперь то, что я хочу, это что-то вроде мышиного события, которое можно применить кцель и не требует определенного класса.
Это должно работать примерно так:
package com.op_pad._events{
import flash.events.MouseEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.EventDispatcher;
import flash.events.Event;
public class HoldEvent extends Event
{
public static const HOLD_COMPLETE:String = "hold completed";
var timer:Timer;
public function SpriteEvent(type:String, bubbles:Boolean=true, cancelable:Boolean=false)
{
super( type, bubbles, cancelable );
timer = new Timer(1000, 1);
//somehow find the target where is event is placed upon -> target.addEventlistener
target.addEventListener(MouseEvent.MOUSE_DOWN, startTimer);
target.addEventListener(MouseEvent.MOUSE_UP, stopTimer);
}
public override function clone():Event
{
return new SpriteEvent(type, bubbles, cancelable);
}
public override function toString():String
{
return formatToString("MovieEvent", "type", "bubbles", "cancelable", "eventPhase");
}
//////////////////////////////////
///// c o n d i t i o n s /////
//////////////////////////////////
private function startTimer(e:MouseEvent):void
{
timer.start();
timer.addEventListener(TimerEvent.TIMER_COMPLETE, complete);
}
private function stopTimer(e:MouseEvent):void
{
timer.stop()
}
public function complete(e:TimerEvent):void {
dispatchEvent(new HoldEvent(HoldEvent.HOLD_COMPLETE));
}
}
}
Это, очевидно, не сработает, но должнодать вам представление о том, чего я хочу достичь.Это должно быть возможно, потому что mouseevent может применяться ко всему. Основная проблема заключается в том, что я не знаю, где мне следует устанавливать требования к событию, которое нужно выполнить, чтобы иметь возможность применять его к видеоклипам и спрайтам.