我正在开发一个多目标应用程序,方案是我必须使用一些条件编译来获取鼠标和/或触摸事件。
所以我正在做这样的事情:
扩展:
package {
import flash.events.MouseEvent;
import flash.display.InteractiveObject;
public class fackeClick extends MouseEvent {
public static const CLICKS:String = "click";
public function fackeClick(type:String, bubbles:Boolean = true, cancelable:Boolean = false, localX:Number=0, localY:Number=0, relatedObject:InteractiveObject = null, ctrlKey:Boolean = false, altKey:Boolean = false, shiftKey:Boolean = false, buttonDown:Boolean = false, delta:int = 0)
{
super(eventType, bubbles, cancelable, localX, localY, relatedObject, ctrlKey, altKey, shiftKey, buttonDown, delta);
}
}
}
使用这样:
package {
import flash.display.MovieClip;
import fackeClick;
public class Main extends MovieClip {
public function Main() {
stage.addEventListener(fackeClick.CLICKS, tryClick);
}
//
private function tryClick(e:fackeClick):void {
trace(e);
}
}
}
此用法会引发运行时错误:
TypeError:错误#1034:类型强制失败:无法将flash.events::MouseEvent@31510089转换为fackeClick。
如果我将私有函数tryClick(e:fackeClick)切换到私有函数tryClick(e:MouseEvent)它可以工作。但我真的需要将自定义事件传递给函数。
“fackeClick”将是一个用不同包编写的类,扩展了Mouse或TouchEvents
请知道我们可以使用clickevents作为touchevents等。 我处于非常特殊的情况下,真的必须这样做。
有什么想法吗?
答案 0 :(得分:1)
引发的错误是因为您的fackeClick.CLICKS
使用与MouseEvent.CLICK
相同的字符串。因此,现在Flash捕获'click'
并调度正常MouseEvent
。哪个与您的fakeClick
类冲突。
这让我想到下一个问题,我认为不可能像这样扩展这些事件。 Flash会处理MouseEvents
本身,因此只需延长MouseEvent
就不会让Flash调度您的自定义事件,而不是真正的MouseEvent
(或TouchEvent
)。
有关Flash如何处理“点击”事件的更多(官方)信息,请参阅文档:
但是我再也不是100%关于这一点,也许你可以通过在舞台上听MouseEvents和TouchEvents并随后发送你自己的事件来找出解决方法。它不会很漂亮但也许它会起作用。