0

我有一个使用 AS 3.0 和 Flash CS4 制作的 Flash 网站模板(四页)。它适用于涉及影片剪辑的作业。目前在主时间线上只有一帧,三层:动作/菜单/内容。

主要时间线上的动作很简单:

content_mc.stop ();

舞台上有一个名为“内容”的影片剪辑,其中包含每个页面的内容。

其中有一个“菜单”影片剪辑,其中包含并控制所有导航按钮。菜单影片剪辑的动作脚本是:

function homeBtnPress (event:MouseEvent):void{
//comments here
//comments here
MovieClip(parent).content_mc.gotoAndStop("home");
}


function aboutBtnPress (event:MouseEvent): void{
MovieClip(parent).content_mc.gotoAndStop ("about");
}

function servicesBtnPress (event:MouseEvent): void{
MovieClip (parent).content_mc.gotoAndStop ("services");


}

function contactBtnPress (event:MouseEvent): void{
MovieClip (parent).content_mc.gotoAndStop ("contact");
}

function portfolioBtnPress (event:MouseEvent): void{
MovieClip (parent).content_mc.gotoAndStop ("portfolio");

}

home.addEventListener(MouseEvent.CLICK, homeBtnPress);
about.addEventListener(MouseEvent.CLICK, aboutBtnPress);
services.addEventListener(MouseEvent.CLICK, servicesBtnPress);
contact.addEventListener(MouseEvent.CLICK, contactBtnPress);
portfolio.addEventListener(MouseEvent.CLICK, portfolioBtnPress);

所以一切正常,但我的导师希望我使用目标路径工具从主时间线控制菜单/内容。我的目标到底是什么——只是“菜单”和“内容”电影剪辑,我会使用什么代码?对不起,如果我解释得不好,我很困惑。

以下是我导师的反馈:

“虽然我们学会了如何从一个影片剪辑中控制主时间线和另一个影片剪辑的时间线,但这并不是最直观的编写脚本的方式,也使得调试变得困难。因此,您将需要探索如何定位菜单影片剪辑中的按钮以及主时间线中内容影片剪辑中的帧。“</p>

提前非常感谢!

4

2 回答 2

1

这是一个非常基本但很方便的任务。

看看这里这里以获得这个想法。第二个教程使用actionscript 2,但思路是一样的。做一个测试,进入主时间线,到 ActionsPanel,选择插入目标路径并选择一个菜单剪辑。从 conent_mc 内部执行相同操作,看看路径有何不同。尝试了解如何访问剪辑(很像文件系统上的文件夹)。

你的导师是对的:

  1. 如果您到处都有代码(在许多电影剪辑中)并且新需要在大约一个月内重新访问该项目,您将忘记所有用于菜单/内容的复杂移动的代码都在哪里,并且浪费时间和精力。
  2. 复制/粘贴代码可以使事情顺利进行,但是一旦它们起作用并且您了解了如何工作,请尝试以一种易于修改而无需更改大部分代码的方式编写它。

编写在主时间线中的代码可能如下所示:

//setup menu click handlers

content_mc.home.addEventListener(MouseEvent.CLICK, menuPress);
content_mc.about.addEventListener(MouseEvent.CLICK, menuPress);
content_mc.services.addEventListener(MouseEvent.CLICK, menuPress);
content_mc.contact.addEventListener(MouseEvent.CLICK, menuPress);
content_mc.portfolio.addEventListener(MouseEvent.CLICK, menuPress);
//take advantage of the fact that your button name is the same as the frame label in content_mc
function menuPress(event:MouseEvent):void{
   content_mc.gotoAndStop(event.currentTarget.name);
}

我使用了 currentTarget,因为它返回的是被点击的对象,而不是某个子对象,这取决于 mouseChildren 是真/假和事件冒泡,这是您稍后可能想要查看的内容。

于 2009-09-06T09:33:09.103 回答
0
var btnArray:Array = [content_mc.home,content_mc.about,content_mc.service,content_mc.contact,content_mc.portfolio];
for(var i:uint=0;i<btnArray.length;i++)
{
    btnArray[i].addEventListener(MouseEvent.CLICK, action);
}
function action(e:MouseEvent):void 
{
    content_mc.gotoAndStop(event.currentTarget.name);
}

我刚刚简化了代码。

于 2011-08-22T07:32:42.663 回答