【问题标题】:Actionscript 3: Using MouseEvent.CLICK and TouchEvent.TOUCH_TAP动作脚本 3:使用 MouseEvent.CLICK 和 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:*) 类型都可以。

标签: actionscript-3 optimization actionscript


【解决方案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。您可以有一个编译器常量来指示应该使用哪种事件类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-09
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    • 2016-03-27
    相关资源
    最近更新 更多