扩展鼠标事件

时间:2011-12-15 14:59:28

标签: actionscript-3 actionscript

我正在开发一个多目标应用程序,方案是我必须使用一些条件编译来获取鼠标和/或触摸事件。

所以我正在做这样的事情:

扩展:

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等。 我处于非常特殊的情况下,真的必须这样做。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

引发的错误是因为您的fackeClick.CLICKS使用与MouseEvent.CLICK相同的字符串。因此,现在Flash捕获'click'并调度正常MouseEvent。哪个与您的fakeClick类冲突。

这让我想到下一个问题,我认为不可能像这样扩展这些事件。 Flash会处理MouseEvents本身,因此只需延长MouseEvent就不会让Flash调度您的自定义事件,而不是真正的MouseEvent(或TouchEvent)。

有关Flash如何处理“点击”事件的更多(官方)信息,请参阅文档:

InteractiveObject - click

但是我再也不是100%关于这一点,也许你可以通过在舞台上听MouseEvents和TouchEvents并随后发送你自己的事件来找出解决方法。它不会很漂亮但也许它会起作用。