好吧,我打破了我的例子以避免使事情变得复杂。
我在第一帧上有2个按钮,由一个名为' container'的动画片段组成。 MOUSE_OVER / OUT用于按钮影片剪辑内的动画,并以stop()停止; (在动画片段按钮内)。
stop();
container.addEventListener(MouseEvent.CLICK, clickCommand);
function clickCommand(event:MouseEvent):void{
if(event.target.name == "button1"){
container.alpha = 0;
gotoAndStop(15);
}
if(event.target.name == "button2"){
container.alpha = 0;
gotoAndStop(16);
}
}
container.addEventListener(MouseEvent.MOUSE_OVER, rollOverCommand);
function rollOverCommand(event:MouseEvent):void{
if(event.target.name == "button1"){
event.target.gotoAndPlay(2);
}
if(event.target.name == "button2"){
event.target.gotoAndPlay(2);
}
}
container.addEventListener(MouseEvent.MOUSE_OUT, rollOutCommand);
function rollOutCommand(event:MouseEvent):void{
if(event.target.name == "button1"){
event.target.gotoAndPlay(11);
}
if(event.target.name == "button2"){
event.target.gotoAndPlay(11);
}
}
正如您所看到的,当用户单击eigher按钮时,我希望容器的alpha为0,然后让时间轴跳转到相应的帧,具体取决于用户是否选择了按钮1(frame15)或按钮2(frame 16)
这很好用。问题是我在这些帧上有一个新菜单,它也被放在一个名为container2的影片剪辑中 - 当我使用这种方法时,它们的MOUSEOVER / OUT / CLICK突然不起作用。这是他们的代码:
stop();
container2.addEventListener(MouseEvent.CLICK, clickCommand2);
function clickCommand2(event:MouseEvent):void
{
if (event.target.parent.name == "main1")
{
event.target.root.gotoAndPlay(13);
trace(event.target.parent.name);
}
else if (event.target.parent.name == "main2")
{
trace(event.target.parent.name);
event.target.root.gotoAndStop(14);
}
}
container2.addEventListener(MouseEvent.MOUSE_OVER, rollOverCommand2);
function rollOverCommand2(event:MouseEvent):void
{
if (event.target.name == "main1","main2")
{
event.target.parent.gotoAndPlay(16);
}
}
container2.addEventListener(MouseEvent.MOUSE_OUT, rollOutCommand2);
function rollOutCommand2(event:MouseEvent):void
{
if (event.target.name == "main1","main2")
{
event.target.parent.gotoAndPlay(21);
}
}
所以我可以到达我想要的帧,但是我放置的新按钮(main1,main2)被禁用了。
是因为我没有删除听众吗?我是以错误的方式解决这个问题吗?
提前致谢 - 非常感谢。
答案 0 :(得分:1)
我将假设您的代码已添加到actions
,而不是添加到单独的AS文件中。
一些建议。如果您的按钮跨越整个时间轴,并且不移动,请确保它们位于自己的图层上,没有新的关键帧,这样就可以保留相同的实例并且事件监听器应该可以正常工作。
如果您的按钮是不同的实例,则需要重新绑定跳转到的关键帧上的事件侦听器。
尽可能避免使用actions
来管理您的动作代码。将代码放在外部AS文件中可以显着减少代码重复。