好的,我有一个奇怪的问题。我在屏幕上有一些动画片段,其中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();
}
按钮代码位于主时间轴上,动画片段代码位于动画片段的时间轴上。
出于某种原因,如果你将movieclip置于DOWN状态(打开弹出窗口)并单击按钮转到下一帧,则动画片段将跟随下一帧和任何其他帧,而不是仅仅消失。
我在其他框架上有相同的代码,其他框架都不会这样,这真的很奇怪。
当它在其他帧上时,你甚至可以点击它,然后调出弹出窗口,其中甚至不存在动画片段和代码。
它发生了什么?
答案 0 :(得分:1)
我尝试过测试,可以重现您的问题。如果在FlashPro中向舞台添加一个动画片段,在更改它的索引或父项之后,它将从该点开始被视为从代码创建的对象,时间轴将忽略它,甚至在它的帧上创建它的另一个实例已创建。
您必须从显示列表中手动删除按钮。
function Nclick(event:MouseEvent):void {
nextFrame();
removeBtns();
}
function Bclick(event:MouseEvent):void {
prevFrame();
removeBtns();
}
function removeBtns():void {
if(currentFrame != 2){ //whatever the frame of your buttons is
if(btn1 && btn1.parent) removeChild(btn1); //btn1 being whatever your button instnace name is
if(btn2 && btn2.parent) removeChild(btn2); //repeat for all buttons
}
}
或者如果您希望使用封装代码而不是上述代码,请将其放在按钮类/时间轴上:
var myFrame:int = MovieClip(parent).currentFrame;
this.addEventListener(Event.ENTER_FRAME,enterFrameHandler);
this.addEventListener(Event.REMOVED_FROM_STAGE,removedHandler);
function enterFrameHandler(e:Event):void {
if(MovieClip(parent).currentFrame != myFrame){
parent.removeChild(this);
}
}
function removedHandler(e:Event):void {
this.removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
this.removeEventListener(Event.REMOVED_FROM_STAGE, removedHandler);
}