如何暂停Flash CS5中的“if collision”?

时间:2012-04-05 20:11:22

标签: actionscript-3

这是碰撞

   if(blue2.hitTestObject(_helicopter))

            {
                trace("YOU HIT THE BLOCK!");
                ihit = true;
                _helicopter.x = 76;
                _helicopter.y = 217;
            }

是否可以在碰撞代码中添加暂停功能^?是这样,我在那里写什么?谢谢!

1 个答案:

答案 0 :(得分:1)

暂停在您的上下文中有点难以理解。

例如,如果您的游戏有一个输入框处理程序,您可以在一段时间内停止所有游戏动画。或者,也许你想要冻结“你碰到了块!”在背景动画仍然运行的情况下留言一段时间。

一种方法是使用计时器。它是异步的,但最终的结果是在一段时间(毫秒)之后调用一个函数。

在这个例子中,执行代码5秒后,匿名函数响应时间已到:

// needed imports:
import flash.events.TimerEvent;
import flash.utils.Timer;

if (blue2.hitTestObject(_helicopter))
{
    trace("YOU HIT THE BLOCK!");
    ihit = true;
    _helicopter.x = 76;
    _helicopter.y = 217;

    var timer:Timer = new Timer(5000); // 5-seconds
    timer.addEventListener(TimerEvent.TIMER, function(event:TimerEvent):void
    {
        timer.reset();
        timer.removeEventListener(TimerEvent.TIMER, arguments.callee);
        trace("5-seconds after hitting the block.");
    });
    timer.start();
}

如果您不喜欢匿名函数,可以将其实现为:

// needed imports:
import flash.events.TimerEvent;
import flash.utils.Timer;

if (blue2.hitTestObject(_helicopter))
{
    trace("YOU HIT THE BLOCK!");
    ihit = true;
    _helicopter.x = 76;
    _helicopter.y = 217;

    var timer:Timer = new Timer(5000); // 5-seconds
    timer.addEventListener(TimerEvent.TIMER, collisionWaitHandler);
    timer.start();
}

// ... later in its own function:

protected function collisionWaitHandler(event:TimerEvent):void
{
    var timer:Timer = Timer(event.currentTarget);
    timer.reset();
    timer.removeEventListener(TimerEvent.TIMER, collisionWaitHandler);

    trace("5-seconds after hitting the block.");
}