【问题标题】:Flash AS3 callback function on clearIntervalclearInterval 上的 Flash AS3 回调函数
【发布时间】:2013-06-26 11:13:05
【问题描述】:

我是 Flash ActionScript 3.0 的新手。我需要 setInterval 上的回调函数,我确实喜欢

有一个篮子叫ownmouse。并附有鼠标。

ownmouse.addEventListener(Event.ENTER_FRAME,fun);
function fun(Eve:Event) {
    ownmouse.startDrag(true);
    Mouse.hide();
}

球从带有 setInterval 的 Flash 文档顶部落下。

var myInterval = setInterval(fallBall,1);
ownmouse.addEventListener(Event.ENTER_FRAME,controlCursor);


function controlCursor(MouseMove:Event) {
    var xaxis:int = mouseX;
    var yaxis:int = mouseY;
    var ballXaxis = ball.x;
    var ballYaxis = ball.y;

    if((ballXaxis+10)>=xaxis && (ballXaxis-10)<=xaxis && (ballYaxis)>=yaxis && (ballYaxis-10)<=yaxis) {
    clearInterval(myInterval, function() {
        myBall.gotoAndPlay(10)
    });
    }

    if(yaxis>620) {
        ownmouse.stopDrag();
        ownmouse.y = 620;
        Mouse.show();
    } else if(yaxis<420) {
        ownmouse.stopDrag();
        ownmouse.y = 430;
        Mouse.show();
    }
}

除了以下代码,一切正常:

clearInterval(myInterval, function() {
        myBall.gotoAndPlay(10)
    });

在 AS3 中是否可以使用回调函数?如果不是,如何解决这个问题?

非常感谢您的帮助:)

【问题讨论】:

    标签: actionscript-3 flash


    【解决方案1】:

    clearInterval 破坏间隔。 setInterval 创建它并返回一个数字,您可以将其放入 clearInterval 以销毁它。

    setTimeout 也只执行一次。

    您还需要在函数之后指定一个时间,以毫秒为单位。

    我将始终建议您使用 Timer 类,因为您可以轻松控制和阅读它。

    【讨论】:

    • 其实我需要销毁区间后的回调函数。
    • 所以在间隔销毁后设置一个setTimeout。
    【解决方案2】:

    clearInterval 没有回调。如果满足销毁它的要求,您可以自己触发一个方法。 根据您的需要,也许计时器会是更好的选择。

    var myTimer:Timer = new timer(1000,8);// set amout 
    myTimer.addEventListener(TimerEvent.TIMER, timerListener);
    myTimer.addEventListener(TimeEvent.TIMER_COMPLETE, timerDone);
    
    function timerListener (e:TimerEvent):void{
     trace("Timer is Triggered");
    }
     function timerDone(e:TimerEvent):void{
     trace("Timer finishing!");
    }
    myTimer.start();
    

    编辑: 就像我说的b4,您可以在满足要求时触发自己的方法。在您的情况下使用更新的来源:

    if((ballXaxis+10)>=xaxis && (ballXaxis-10)<=xaxis && (ballYaxis)>=yaxis && (ballYaxis-10)<=yaxis) {
        clearInterval(myInterval);
        intervalDestroyed();
        }
    
    function intervalDestroyed():void
    {
      trace("Intervall has been cleared");
      myBall.gotoAndPlay(10);
    }
    

    如果这是你唯一想做的事情,你可以在 if 中调用你需要的任何东西:

    if((ballXaxis+10)>=xaxis && (ballXaxis-10)<=xaxis && (ballYaxis)>=yaxis && (ballYaxis-10)<=yaxis) {
            clearInterval(myInterval);
            myBall.gotoAndPlay(10);
            }
    

    【讨论】:

    • 非常感谢您的回答。我在问题发布之前做过:clearInterval(myInterval); myBall.gotoAndPlay(10);. clearInterval 运行良好,但 myBall.gotoAndPlay(10) 仅在移动鼠标后才有效,即使在 clearInterval 之后也是如此。所以现在你明白我的问题了。非常感谢您的完整解决方案。
    • 您应该首先使用 MOUSE_MOVE 事件而不是 enterframe。你试过我的 intervalDestroyed 方法了吗?
    猜你喜欢
    • 2015-08-22
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 2013-05-09
    相关资源
    最近更新 更多