我有一个让我紧张的严重问题:
我创建了一个按钮 _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:我不理解大多数编程语言。如果你能尽可能清晰直接,我会非常感激它)
答案 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以防