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