Actionscript 3 ActionScript MouseEvent';s单击与双击

Actionscript 3 ActionScript MouseEvent';s单击与双击,actionscript-3,click,mouseevent,double-click,Actionscript 3,Click,Mouseevent,Double Click,不能在同一个显示对象上同时单击和双击吗?我正在尝试将这两种方法都用于阶段,双击阶段添加一个新对象,并在阶段上单击一次取消选择一个选定对象 看起来双击将执行自身以及双击路径中的第一次单击功能(鼠标下、鼠标上、单击、鼠标下、鼠标上、双击) 在我使用的其他语言中,有一个内置的计时器将这两种语言区分开来。这在AS3中不可用吗 使现代化 这里有一些代码。基本上,我想要的是一个或另一个,而不是双击两个 stage.doubleClickEnabled = true; stage.addEventListe

不能在同一个显示对象上同时单击和双击吗?我正在尝试将这两种方法都用于阶段,双击阶段添加一个新对象,并在阶段上单击一次取消选择一个选定对象

看起来双击将执行自身以及双击路径中的第一次单击功能(鼠标下、鼠标上、单击、鼠标下、鼠标上、双击)

在我使用的其他语言中,有一个内置的计时器将这两种语言区分开来。这在AS3中不可用吗


使现代化 这里有一些代码。基本上,我想要的是一个或另一个,而不是双击两个

stage.doubleClickEnabled = true;
stage.addEventListener(MouseEvent.DOUBLE_CLICK, twoClicks, false, 0, true);
stage.addEventListener(MouseEvent.CLICK, oneClick, false, 0, true);

function oneClick(evt:MouseEvent):void
    {
    trace("One CLICK");
    }

function twoClicks(evt:MouseEvent):void
    {
    trace("Two CLICKS");
    }

//oneClick trace = "One CLICK"
//twoClicks trace = "One CLICK Two CLICKS" (instead of just Two CLICKS)

您是否将
.doubleClickEnabled
设置为true


您还应该看一看。

您是否将
.doubleClickEnabled
设置为true


您还应该看一看。

嗯,您可以使用
setTimeout
cleartimout

看起来是这样的:

const var DOUBLE_CLICK_SPEED:int = 10;
var mouseTimeout;

function handleClick(evt:MouseEvent):void {
    if (mouseTimeout != undefined) {
        twoClicks();
        clearTimeout(mouseTimeout);
        mouseTimeout = undefined;
    } else {
        function handleSingleClick():void {
            oneClick();
            mouseTimeout = undefined;
        }
        mouseTimeout = setTimeout(handleSingleClick, DOUBLE_CLICK_SPEED);
    }
}

function oneClick(evt:MouseEvent):void {
    trace("One CLICK");
}

function twoClicks(evt:MouseEvent):void {
    trace("Two CLICKS");
}
stage.addEventListener(MouseEvent.CLICK, handleClick, false, 0, true);

您可以使用
setTimeout
cleartimout

看起来是这样的:

const var DOUBLE_CLICK_SPEED:int = 10;
var mouseTimeout;

function handleClick(evt:MouseEvent):void {
    if (mouseTimeout != undefined) {
        twoClicks();
        clearTimeout(mouseTimeout);
        mouseTimeout = undefined;
    } else {
        function handleSingleClick():void {
            oneClick();
            mouseTimeout = undefined;
        }
        mouseTimeout = setTimeout(handleSingleClick, DOUBLE_CLICK_SPEED);
    }
}

function oneClick(evt:MouseEvent):void {
    trace("One CLICK");
}

function twoClicks(evt:MouseEvent):void {
    trace("Two CLICKS");
}
stage.addEventListener(MouseEvent.CLICK, handleClick, false, 0, true);

回答得很好,谢谢你。我刚刚实现了您的解决方案并改进了几点,所以我想我应该把它放在这里以供将来参考(当然还有溢出社区的好处!)。首先,我无法在setTimeout返回的uint上测试undefined,因此我将undefined条件替换为==0条件。其次,我想立即提交一次单击的逻辑(只是为了获得更愉快的用户界面),所以我做了一些调整:

        if (mouseTimeout != 0) {
            // clicked within the timeout, handle as double click

            // rollback single click logic
            rollbackSingleClickHandler(e);
            // commit double click logic
            dblClickHandler(e);

            clearTimeOut(mouseTimeout);
            mouseTimeout = 0;
        } else {
            // first click of a click sequence

            // commit single click logic
            singleClickHandler(e); 

            function clearTime():void {
                mouseTimeout = 0;
            }

            // register a timeout for a potential double click
            mouseTimeout = setTimeout(clearTime, DOUBLE_CLICK_SPEED);
        }

回答得很好,谢谢你。我刚刚实现了您的解决方案并改进了几点,所以我想我应该把它放在这里以供将来参考(当然还有溢出社区的好处!)。首先,我无法在setTimeout返回的uint上测试undefined,因此我将undefined条件替换为==0条件。其次,我想立即提交一次单击的逻辑(只是为了获得更愉快的用户界面),所以我做了一些调整:

        if (mouseTimeout != 0) {
            // clicked within the timeout, handle as double click

            // rollback single click logic
            rollbackSingleClickHandler(e);
            // commit double click logic
            dblClickHandler(e);

            clearTimeOut(mouseTimeout);
            mouseTimeout = 0;
        } else {
            // first click of a click sequence

            // commit single click logic
            singleClickHandler(e); 

            function clearTime():void {
                mouseTimeout = 0;
            }

            // register a timeout for a potential double click
            mouseTimeout = setTimeout(clearTime, DOUBLE_CLICK_SPEED);
        }

当然可以。否则双击就不行了。我已经用代码更新了我的问题,这样你就可以看到我想做什么。是的,当然。否则双击就不行了。我用代码更新了我的问题,这样你就可以看到我想做什么。是的,唯一的问题是它不考虑系统控制面板中的用户配置,不管怎样,它是有效的。投票结果:)甚至可以在Flash中访问吗?对实际ClickHandler的调用缺少MouseeEvent,双击速度需要更高,大约300毫秒。除此之外,+1还必须添加一个双击处理程序:stage.doubleClickEnabled=true;stage.addEventListener(MouseEvent.双击,handleClick,false,0,true);是的,唯一的问题是它不考虑系统控制面板中的用户配置,不管怎样,它工作,投票:)甚至可以在Flash中访问吗?对实际的点击处理的调用缺少鼠标事件,DouffyLCKIX速度需要更高,大约300毫秒。除此之外,+1还必须添加一个双击处理程序:stage.doubleClickEnabled=true;stage.addEventListener(MouseEvent.双击,handleClick,false,0,true);你必须自己做。双击在实践中是非常无用的。我的意思是,如果你想听到双击,很可能是因为你想给一个单击分配一个动作,给一个双击分配一个不同的(独立的)动作。是的,这是我对其他开发SDK(如iPhone tapping)习以为常的事。但几个小时后,我成功地使用actionscript启用了单击和双击,而不必求助于任何计时器。我真的没有看到这里的问题。单击一次以取消选择不应妨碍尝试双击。那么,如果单次单击事件被触发怎么办?双击时是否要保留可能的选择?您必须自己进行。双击在实践中是非常无用的。我的意思是,如果你想听到双击,很可能是因为你想给一个单击分配一个动作,给一个双击分配一个不同的(独立的)动作。是的,这是我对其他开发SDK(如iPhone tapping)习以为常的事。但几个小时后,我成功地使用actionscript启用了单击和双击,而不必求助于任何计时器。我真的没有看到这里的问题。单击一次以取消选择不应妨碍尝试双击。那么,如果单次单击事件被触发怎么办?双击时是否要保留可能的选择?