动作脚本 3:使用 MouseEvent.CLICK 和 TouchEvent.TOUCH_TAP

Posted

技术标签:

【中文标题】动作脚本 3:使用 MouseEvent.CLICK 和 TouchEvent.TOUCH_TAP【英文标题】:Actionscript 3: Using MouseEvent.CLICK and TouchEvent.TOUCH_TAP 【发布时间】:2018-06-14 07:12:12 【问题描述】:

我实现了

MouseEvent.CLICK 

在我的项目中用于触摸和非触摸设备。我现在正在使用

TouchEvent.TOUCH_TAP 

因为这在触摸屏上效果更好。

但是,这不适用于非触控设备。所以我想使用适合平台的任何一个。我的项目已部署到移动和桌面。

我希望存在更好的方法,而不是在 if 语句中覆盖我的项目!

if (mobile) 
  addEventListener(TouchEvent.TOUCH_TAP, closeClick);
 else 
  addEventListener(MouseEvent.CLICK, closeClick);

【问题讨论】:

您在应用启动时设置一次的全局变量(设置为 TouchEvent.TOUCH_TAPMouseEvent.CLICK),然后将此变量用于事件名称:addEventListener(SharedData.CLICKTAP, closeClick); @organis,谢谢,但请问您将如何处理发送到 closeClick 函数的事件,我可以只使用函数 closeClick(event:*):void,还是这是不好的做法? 当然可以。只要您不需要事件对象中的任何内容,就可以了。如果你仍然需要一些东西(比如 targetcurrentTarget),你可以将它声明为最基本的 Event 类,这两个 TouchEvent 和 MouseEvent 子类。 @Organis 在这里,将Event 声明为侦听器的接收类型就可以了。我想知道如果需要在类似的应用程序架构中监听 mousedown/drag 和 touchdown/drag 事件,应该声明什么。 @Vesper,将 e 声明为任何 (e:*) 类型都可以。 【参考方案1】:

就像 Organis 建议的那样,我认为定义自己的全局变量是一种好方法。如果这样更容易不必担心设置变量的位置和时间,您还可以使用方法,甚至是 getter 方法,如下所示:

public class EventConfig

    public static function get clickTap():String
    
        return mobile ? TouchEvent.TOUCH_TAP : MouseEvent.CLICK;
    

那么你可以这样听:

addEventListener(EventConfig.clickTap, myFunc);

但请注意,请确保您的处理函数始终有一个 Event 参数,而不是 MouseEventTouchEvent,因为您可能会通过将错误类型的事件传递给这些函数而导致静默失败,而且没有办法要捕获这些异常,您将很难弄清楚发生了什么。

public function myFunc(e:Event):void

附带说明,如果您有兴趣为触摸屏和鼠标分别构建,您可以查看 FlashDevelop 的 conditional compilation。您可以有一个编译器常量来指示应该使用哪种事件类型。

【讨论】:

以上是关于动作脚本 3:使用 MouseEvent.CLICK 和 TouchEvent.TOUCH_TAP的主要内容,如果未能解决你的问题,请参考以下文章

使用动作脚本 3 检测颜色

动作脚本 3 滑动功能(不会滑动)

无限循环(动作脚本 3)

如何知道是动作脚本 1、动作脚本 2 还是动作脚本 3?

ActionScript 3 使用动作脚本将子项添加到舞台

Flash 动作脚本 3.0