Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 带计时器和确认框的长触摸事件,用于在AS3中部署iOS_Actionscript 3_Flash Cs6 - Fatal编程技术网

Actionscript 3 带计时器和确认框的长触摸事件,用于在AS3中部署iOS

Actionscript 3 带计时器和确认框的长触摸事件,用于在AS3中部署iOS,actionscript-3,flash-cs6,Actionscript 3,Flash Cs6,我有一个项目,我有一个滚动列表。我希望我的用户能够“长时间触摸”列表中的一个项目,以便他们可以删除它 我正在使用FlashCS6为iOS在空中开发,所以我对iOS部署的适当多点触控手势知之甚少 在我心目中,动画的步骤我想这样走 当长时间触摸启动+计时器启动时,项目movieclip内先前不可见的btn_delete按钮将出现 中间步骤:btn_delete将使用TweenMax rotate旋转90度(我已经介绍过了) 最后一步:当计时器得出结论时,会弹出一个对话框/确认框,询问用户是否确定要删

我有一个项目,我有一个滚动列表。我希望我的用户能够“长时间触摸”列表中的一个项目,以便他们可以删除它

我正在使用FlashCS6为iOS在空中开发,所以我对iOS部署的适当多点触控手势知之甚少

在我心目中,动画的步骤我想这样走

  • 当长时间触摸启动+计时器启动时,项目movieclip内先前不可见的btn_delete按钮将出现
  • 中间步骤:btn_delete将使用TweenMax rotate旋转90度(我已经介绍过了)
  • 最后一步:当计时器得出结论时,会弹出一个对话框/确认框,询问用户是否确定要删除该项
  • 下面是我快速编写的一些通用代码,让您了解到目前为止我的结构(我省略了相互链接的侦听器函数):


    如果任何人有一段代码,他们已经写了,大致符合我的标准,然后请张贴它

    我只想使用
    MouseEvent
    来实现这一点

    var timer:Timer = new Timer( 500 ); //ms
    timer.addEventListener( TimerEvent.TIMER_COMPLETE, timerCompleteHandler );
    
    listItem.addEventListener( MouseEvent.MOUSE_DOWN, mouseDownHandler );
    
    function mouseDownHandler( e:MouseEvent ):void {
        timer.start();
        stage.addEventListener( MouseEvent.MOUSE_UP, mouseUpHandler );
    }
    
    function mouseUpHandler( e:MouseEvent ):void {
        //just some clean up to reset the timer and remove the mouse up event listener from the stage 
        timer.reset();
        stage.removeEventListener( MouseEvent.MOUSE_UP, mouseUpHandler );
    }
    
    function timerCompleteHandler( e:TimerEvent ):void {
        timer.reset();
        stage.removeEventListener( MouseEvent.MOUSE_UP, mouseUpHandler );
    
        //do delete actions here
    }
    
    所以当鼠标按下时,你启动计时器并监听鼠标上升事件(在舞台上而不是组件上。这很重要。如果你想知道原因,请在组件上尝试并进行实验)。鼠标向上移动时,重置计时器,以便下次鼠标向下移动时,计时器从0开始(reset()还有停止计时器的额外好处)。计时器完成后,除了删除代码外,还可以执行与鼠标向上移动相同的操作

    我在这里使用MouseEvent只是因为它在这个实例中的行为与TouchEvent相同(大部分情况下),并且可以在桌面上使用它(这意味着您可以在emulator中进行测试,如果需要,您可以将其添加到其他项目中)

    更新:
    重读你的问题,发现我错过了轮换。为此,只需添加另一个带有独立完整处理程序的计时器,在该函数中,只需旋转并重置该计时器。

    在我继续测试您的答案之前,您知道的
    MouseEvent
    TouchEvent
    之间有什么细微的区别,所以我知道在部署到iPhone时的限制?在这种情况下,我想不出有什么区别。TouchEvent为触摸设备提供了更精确的事件,但大多数情况下它们是不需要的。“开始”、“点击”和“退出”与“鼠标按下”、“单击”和“鼠标向上”几乎相同。他们被呼叫的时间可能会有所不同,但我从未测试过,所以我不能肯定地告诉你。不过,在大多数情况下,您可以坚持使用MouseEvents。好的,我已经实现了您的代码,但是当涉及到桌面的空中调试启动器时,它不会响应MOUSE_DOWN事件(?)。我已经在我的网站上压缩了我的项目,如果你能看一看,我将永远感激你!()[愚蠢的想法:我使用的是Mac,Mac触控板会有问题吗?)您只将鼠标应用于单个项目,即最后创建的项目。将事件侦听器应用于每个对象,然后在处理程序中,您可以使用
    事件.currentTarget
    (或
    事件.target
    )单击对象.target是最初调度事件的对象(因此它可能是列表项的子项,您不希望这样)。currentTarget是最新调度事件的对象(99%的时间是您需要的)
    var timer:Timer = new Timer( 500 ); //ms
    timer.addEventListener( TimerEvent.TIMER_COMPLETE, timerCompleteHandler );
    
    listItem.addEventListener( MouseEvent.MOUSE_DOWN, mouseDownHandler );
    
    function mouseDownHandler( e:MouseEvent ):void {
        timer.start();
        stage.addEventListener( MouseEvent.MOUSE_UP, mouseUpHandler );
    }
    
    function mouseUpHandler( e:MouseEvent ):void {
        //just some clean up to reset the timer and remove the mouse up event listener from the stage 
        timer.reset();
        stage.removeEventListener( MouseEvent.MOUSE_UP, mouseUpHandler );
    }
    
    function timerCompleteHandler( e:TimerEvent ):void {
        timer.reset();
        stage.removeEventListener( MouseEvent.MOUSE_UP, mouseUpHandler );
    
        //do delete actions here
    }