Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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
Flash 带定时器的闪烁电影剪辑_Flash_Actionscript 3 - Fatal编程技术网

Flash 带定时器的闪烁电影剪辑

Flash 带定时器的闪烁电影剪辑,flash,actionscript-3,Flash,Actionscript 3,我正在尝试使我的movieclip闪烁,当它被某物击中时闪烁,以创建游戏效果。当它被击中时,我有一个命中测试,捕捉在对象上被调用。对象的捕捉功能将根据计时器使其停止并开始闪烁。我的计时器设置为新计时器(400);为什么我的物体不闪烁?我的情况似乎是正确的 if (hit.hitTestObject(f.hit)) f.caught(); private function blinkingHandler(evt:TimerEvent):void { _

我正在尝试使我的movieclip闪烁,当它被某物击中时闪烁,以创建游戏效果。当它被击中时,我有一个命中测试,捕捉在对象上被调用。对象的捕捉功能将根据计时器使其停止并开始闪烁。我的计时器设置为新计时器(400);为什么我的物体不闪烁?我的情况似乎是正确的

if (hit.hitTestObject(f.hit))
    f.caught();


    private function blinkingHandler(evt:TimerEvent):void
    {

        _canBlink = true;
        if (_canBlink)
        {
            this.alpha = 0;
            _canBlink = false;
            this.alpha = 100;
            trace("blinking");
        }
    }
    public function caught() : void
    {   
        _blinkTimer.start();


        //removeEventListener(Event.ENTER_FRAME, loop);

        //this.stop();
    }

首先,我假设您添加了事件侦听器,以便在计时器触发时触发
blinkingHandler
调用:

_blinkTimer.addEventListener(TimerEvent.TIMER, blinkingHandler);
现在,
blinkingHandler
正如您发布的那样,它将永远不会隐藏对象。alpha设置为0,但在同一调用中立即将其设置回1,因此最终结果是alpha不会显示为0。必须将alpha设置为0,渲染几帧,在下一个计时器计时时将其设置回1,依此类推。试试这个:

private function blinkingHandler(evt:TimerEvent):void
{
    if(_canBlink) this.alpha = 1;
    else this.alpha = 0;
    _canBlink = !_canBlink;
}
你甚至可以:

visible = !visible;
只需在每个计时器刻度上切换可见性

var timer:Timer =  new Timer(200);
var blink:Boolean = true;
timer.start();
sq_mc.addEventListener(MouseEvent.MOUSE_OVER, onMseOvrAction);
sq_mc.addEventListener(MouseEvent.MOUSE_OUT, onMseOutAction);
function onMseOvrAction(e:MouseEvent):void{
    timer.addEventListener(TimerEvent.TIMER, timerAction);
}
function onMseOutAction(e:MouseEvent):void{
    timer.removeEventListener(TimerEvent.TIMER, timerAction);
    sq_mc.alpha = 1;
}
function timerAction(e:TimerEvent):void
{
    if (!blink){
        sq_mc.alpha = 1;
    } else{
        sq_mc.alpha = 0;
    }
    blink = !blink;
}

艾伦先生,我已经改变了。

另外,虽然它仍然是100,但对于AS3,alpha值范围是0-1。比较数字从来都不是一个好主意。浮点错误可能导致alpha值接近0.00000001,并且会使相等性检查失败。与数字0和1不同的是,尝试将alpha设置为0.6,然后跟踪alpha值,最终结果将类似于0.59765625。@allan:谢谢,我已经更改了编码。