Actionscript3 clearInterval无法在TouchEvent.TOUCH_BEGIN上运行

时间:2015-05-26 15:10:22

标签: actionscript-3

我在setInterval上拨打了TouchEvent.TOUCH_END,我想在触摸屏幕时清除它。

这是我的代码:

import fl.motion.MotionEvent;
import flash.display.MovieClip;
import flash.utils.*;

Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;

stage.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin);
stage.addEventListener(TouchEvent.TOUCH_END, onTouchEnd);

function onTouchBegin(evt:TouchEvent)
{
    clearInterval(MovieClip(root).myInterval);
}

function onTouchEnd(evt:TouchEvent)
{
    MovieClip(root).myInterval = setInterval(showTimer,1000);
}

function showTimer()
{
    trace("interval working");
}

1 个答案:

答案 0 :(得分:0)

您提供的代码并未真正解释所有内容,因此在此答案中会有一些猜测:

Possiblity No.1:

您将root投射到MovieClip的方式无效。尝试更改为以下内容:

function onTouchBegin(evt:TouchEvent)
{
     var intervalRef:int = (root as MovieClip).myInterval;
     clearInterval(intervalRef);
}

Possiblity No. 2:

您的代码似乎是在一个框架中编写的。虽然如果您在前一帧中定义某些内容它应该可以工作,但如果您在同一个关键帧上的不同(较低)层上有代码,则可以在以后定义该变量,并且您的MovieClip(root).myInterval变量为{{1} }或undefined是未定义的值。因此,请检查您的变量是否存在:

null

Possiblity No. 3:

你正在骑车穿越镜架。当我有2个帧时:一个空白,一个带有您的代码,代码无法正常工作。在Flash CC中测试。

可能性4:

您在其他地方遇到运行时错误,并且您的整个框架代码未被执行。您是否使用Flash Player的调试版本?

减少头痛的可能解决方案:

使用function onTouchBegin(evt:TouchEvent) { trace(MovieClip(root) == null); // see if the root is defined trace(MovieClip(root).myInterval); // see if the myInterval is defined } 。它易于控制,易于管理和处理。我已编辑您的代码以使用Timer并进行测试。随意将它用于您的项目。

Timer


我想要注意,如果我只是将其复制粘贴到单帧Flash文件中,则代码可以正常工作。但是,Adobe仍然鼓励使用Timer。