저는 맞춤 이벤트 (청취자)를 오랫동안 조사해 왔지만 실제로는 만들지 못했습니다. 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를 모든 것에 적용 할 수 있기 때문입니다. 주요 문제는 영화 클립과 스프라이트에 적용 할 수 있도록 실행해야 할 이벤트에 대한 요구 사항을 어디에 설정해야하는지 모르는 것입니다.
귀하의 예는 종류의 혼란이다. 시도하고 당신이 정말로 달성하고 싶은 것을 설명하는 질문을 편집하고 도와 드리겠습니다. 일반적으로 이벤트 클래스 자체는 추가 이벤트 추가, 타이머 사용 등을해서는 안됩니다. 이러한 유형의 로직은 이벤트 리스너에서 수행되어야합니다. – sberry