AS3:快速悬停不会执行rollOut

时间:2015-06-14 22:23:05

标签: actionscript-3 flash button

我有一个让我紧张的严重问题:

我创建了一个按钮 _btn ,其中包含带编码的ROLLOVER和ROLLOUT动画(一个名为 barra 的嵌套movieclip实例,当你将鼠标悬停在其上时会增加到半个alpha)当你徘徊时减少。)

[这里它应该是一个描述性的图像,但我是新的,我需要10个声誉。我感谢您的帮助]

这很有效,但当我将光标从一个点快速移动到另一个点时,问题就出现了,按钮位于之间。似乎没有检测到ROLLOUT功能,因此ROLLOVER动画继续工作(如果仔细观察,动画会停止几秒钟然后继续)。

[此处它应该是另一个描述性图像]

这是Actions层中的代码:

//Funciones ROLL OVER
function _btnOver(event:MouseEvent):void {
    _btn.buttonMode = true;
    _btn.addEventListener(Event.ENTER_FRAME,_btnFadeIn);
}

function _btnFadeIn(event:Event):void {
    _btn.barra.alpha += 0.1;
    if (_btn.barra.alpha >= 0.5)
    {
    _btn.removeEventListener(Event.ENTER_FRAME,_btnFadeIn);
    }
}

_btn.addEventListener(MouseEvent.ROLL_OVER,_btnOver);


//Funciones ROLL OUT
function _btnOut(event:MouseEvent):void {
_btn.addEventListener(Event.ENTER_FRAME,_btnFadeOut);
}

function _btnFadeOut(event:Event):void {
    _btn.barra.alpha -= 0.1;
    if (_btn.barra.alpha <= 0.2)
    {
    _btn.removeEventListener(Event.ENTER_FRAME,_btnFadeOut);
    }
}

_btn.addEventListener(MouseEvent.ROLL_OUT,_btnOut);

Click here if you want to download the FLA and SWF files,您可以清楚地看到问题。

我几乎不知道如何使用ActionScript 3(我唯一的编程知识是处理),我现在没有时间从头到脚学习它,但我已经研究过这个问题而且#&# 39; s仍然不清楚。

通过教程和指南,我设法学习如何创建和理解这些代码,我认为问题可能在事件ROLL_OVER和ROLL_OUT的函数中,它们包含ENTER_FRAME事件的addEventListener(其中)动画实际上是),分别。但我不确切地知道我必须做些什么来解决它,我应该添加或改变什么。

如果有人可以帮助我,我会很高兴,我很沮丧!你建议我做什么?

提前致谢

(PD:我不理解大多数编程语言。如果你能尽可能清晰直接,我会非常感激它)

2 个答案:

答案 0 :(得分:1)

通过使用输入框架侦听器,显然你的麻烦在于不连贯的动画序列。您正在运行两个独立的侦听器,两者都改变​​单个对象的alpha,这会产生冲突,只有一个会起作用(您可以确定如果同时添加两个并触发事件,则生成的alpha值将指示哪个听众改变它最后)你显然希望一个人淡入淡出而另一个人淡出淡出。相反,你应该使用一个监听器(可能甚至是持久的)并给你的对象&#34;目标alpha&#34;属性以及delta每帧更改alpha。一个例子:

var bbta:Number=0.2; // btn.barra's target alpha
_btn.addEventListener(Event.ENTER_FRAME,_btnFade);
function _btnFade(e:Event):void {
    var a:Number=_btn.barra.alpha;
    if (Math.abs(a-bbta)<1e-8) return; 
    // no sense of setting alpha with minuscule difference
    const delta:Number=0.1; // how fast to change per frame
    if (a>bbta) {
        a-=delta;
        if (a<=bbta) a=bbta;
    } else {
        a+=delta;
        if (a>=bbta) a=bbta;
    }
    _btn.barra.alpha=a;
}
function _btnOver(event:MouseEvent):void {
    _btn.buttonMode = true; // move this elsewhere, if you don't cancel buttonMode
    bbta=0.5; // set target alpha, the listener will do a fade-in
}
function _btnOut(event:MouseEvent):void {
    bbta=0.2; // set target alpha, the listener will do a fade-out
}

答案 1 :(得分:0)

我在这里编辑了一些代码,基本上我正在检查悬停状态onLoop功能,所以你可以在这里更改你的设置

import flash.events.Event;

var isRolledOver:Boolean = false;

//Funciones ROLL OVER
function _btnOver(event:MouseEvent):void {
    isRolledOver = true;
}

function _btnOut(event:MouseEvent):void {
    isRolledOver = false;
}

_btn.addEventListener(MouseEvent.ROLL_OVER,_btnOver);

_btn.addEventListener(MouseEvent.ROLL_OUT,_btnOut);

this.addEventListener(Event.ENTER_FRAME,onLoop);

function onLoop(e){
    if(this.isRolledOver){
        if(_btn.barra.alpha < 0.5) _btn.barra.alpha += 0.1;
    }
    else{
        if(_btn.barra.alpha > 0.5 || _btn.barra.alpha > 0) _btn.barra.alpha -= 0.1;
    }
}

我添加了样本fla以防