【发布时间】:2014-09-25 04:32:58
【问题描述】:
好的,所以我遇到了一个奇怪的问题。我在屏幕上有一些电影剪辑,其中 4 个,每个都有以下代码(当然有不同的实例名称):
stage.addEventListener(MouseEvent.MOUSE_DOWN,globalMouseDown,false,0,true); //add a global mouse listener
function globalMouseDown(e:Event):void {
//find out if the target is a descendant of this, if not, then something else was clicked.
var parent:DisplayObject = e.target as DisplayObject;
while(parent && parent != stage){
if(parent == this) return;
parent = parent.parent;
}
//something else was clicked that wasn't this, so go to the up state
gotoAndStop(1);
}
stop();
addEventListener(MouseEvent.MOUSE_DOWN, onHs1Press);
addEventListener(MouseEvent.MOUSE_OVER, onHs1Over);
addEventListener(MouseEvent.MOUSE_OUT, onHs1Out);
function onHs1Press(event:MouseEvent):void
{
// toggle between frame 1 and 3 on button press
gotoAndStop(this.currentFrame == 3 ? 1 : 3);
parent.addChild(this)
}
function onHs1Over(event:MouseEvent):void
{
if (currentFrame != 3)
{
gotoAndStop(2);
}
}
function onHs1Out(event:MouseEvent):void
{
// only switch back to UP state if the button is "pressed"
if (currentFrame != 3)
{
gotoAndStop(1);
}
}
基本上,它可以让您将鼠标悬停在动画剪辑上,然后当您单击它时会出现一个小弹出窗口,直到您再次单击该动画剪辑以将其关闭。
屏幕上还有一个按钮,可让您使用此代码向前或向后移动到其他帧:
Next.addEventListener(MouseEvent.CLICK,Nclick);
function Nclick(event:MouseEvent):void {
nextFrame();
}
Back.addEventListener(MouseEvent.CLICK,Bclick);
function Bclick(event:MouseEvent):void {
prevFrame();
}
按钮代码位于主时间轴上,而影片剪辑代码位于影片剪辑的时间轴上。
由于某种原因,如果您的影片剪辑处于 DOWN 状态(弹出窗口打开)并且您单击按钮转到下一帧,影片剪辑将跟随下一帧和任何其他帧,而不是消失。
我在其他帧上也有相同的代码,其他帧都没有这样的行为,这真的很奇怪。
您甚至可以在它位于其他帧上时仍然单击它,然后弹出一个弹出窗口,其中甚至不存在影片剪辑和代码。
这是怎么回事?
【问题讨论】:
-
如果您注释掉
parent.addChild(this)代码,它是否可以正常工作?或者注释掉全局鼠标监听器? -
你不应该使用框架。框架用于快速/简单的动画。不要使用它们来控制代码。此外,一般来说,您永远不应该使用 parent。
-
全局鼠标监听器的评论已经不在了?并且向 parent.addChild(this) 添加评论什么都不做。这很奇怪,因为我在另一个框架上有完全相同的代码,但它没有这样做。就作品的架构而言,有主时间轴,在主时间轴的这一帧上有 4 个动画剪辑,第一段代码在 4 个动画剪辑的每个的第一帧上,所以代码不在主线。第二段代码,用于下一步和后退按钮是在主时间轴上。
-
好的,我认为问题出在 parent.addChild(this) 部分。我用它来确保所有子影片剪辑都显示在其他所有内容之上。有没有其他方法可以做到这一点?
-
当我说注释掉时,我的意思是把整行变成注释(有效地删除这行代码来测试它是否是原因)。
标签: actionscript-3 flash button adobe movieclip