首先,我们先进行一下功能的定位,也就是需要实现哪些功能。列举如下:
1)当弹出某一个菜单时,其它菜单处于收起的状态。
2)当点击菜单中的某一项任务时,驱动任务,并将下拉的菜单收起。
3)各菜单初始状态下,需要点击才会被驱动,不然初始状态既便是经过了也不会弹出,而一旦某一个菜单被单击,则当鼠标移动到其它菜单上时,其它菜单的菜单项会自动弹出。
4)一个菜单被展开,当在菜单区域外单击时,所有下拉的菜单收起。
5)一个菜单被展开后,当再一次点击菜单时收回。
6)二级乃至于更多级菜单的制作。
实现第一、二功能方法:
首先:在文档属性中设置场景大小为400*300,背景为白色,帧频为24。把主场景当中的第一图层更名为background,即作为背景层,导入一张背景图片。调整好位置后把图层设置为锁定状态。场景图片如下:
第二步:新建一个图层,命名为menu.打开窗口菜单,选择公共库选项,再选中按钮选项。打开库-按钮面板。
选中buttons bar capped项目中的bar capped
orange按钮,并拖放到场景当中。利用工具菜单在场景中绘制一个矩形,大小基本上和被导入的按钮相同。选中这个矩形,按F8将其转换成元件,名称为button2.双击刚刚从库-按钮中导入的那个按钮,将其各图层的帧全部选中并复制,在库面板中选中button2按钮,双击打开,使得button2处于被编辑的状态。选择该图层的第一帧,之后粘贴帧,并把该按钮的文本改写成“菜单二”。回到主场景中你会发现这时场景内会有两个按钮,但发现第一个被导入的文本并非是我们所需要的,所以双击第一个按钮,进入编辑状态,将其文本改写为“菜单一”通过此法也把两个按钮文本的文字设置为可读性消除锯齿,这样文本便易于将遇阅读。再回到主场景中,点击对齐面板当中的对齐项目,这样两个按钮制作完毕,而且基本相同,并处于同一水平。
接下来,我们分别选中这两个按钮,并将其各自通过F8转化为影片剪辑元件,命名分别为number1及number2.也需要在场景中分别选中这两个影片剪辑,并在各自的属性当中为其命名为number1及number2.
on(rollOver){
_root.number2.gotoAndStop(1);
gotoAndStop(2);
}
}
目的是当鼠标经过该菜单时,指针跳一第二帧,也就是先将菜单number2收起,之后显示菜单number1。
on(release){
getURL("http://www.baidu.com","_blank");
_root.number1.gotoAndStop(1);
}
}
及on(release){
getURL("http://www.sina.com.cn","_blank");
_root.number1.gotoAndStop(1);
}
}
及on(release){
getURL("http://www.sohu.com","_blank");
_root.number1.gotoAndStop(1);
}
}
目的便是想驱动程序打开相应的网站。而_root.number1.gotoAndStop(1)便是想把本菜单也收起。
用同种方法为菜单number2的内部填写代码。至此菜单制作中最基本的内容已经被实现了。
但要注意,第二个菜单number2的菜单项按钮填写的代码是:
on(rollOver){
_root.number1.gotoAndStop(1);
gotoAndStop(2);
}
}
也就是就要把 _root.number2.gotoAndStop(1);改成 _root.number1.gotoAndStop(1);因为现在是想当打开菜单二时把菜单一收起,只有这样才能达到该效果。
但我们也要考虑到,在菜单二中也同样是单击驱动按钮时将自己的菜单项收起,所以从菜单一那里复制的按钮程序_root.number1.gotoAndStop(1);应改写成_root.number2.gotoAndStop(1);
实现第三功能方法:
这一操作从功能角度实际上就是两个状态,我们可以通过设置布尔变量的方法来实现。但要考虑到这个布尔变量应对所有菜单可用,因为我们现在要解决的这一问题就是菜单之间的关系问题,通过这些方面的思想准备,我想我们应该使用全局变量的方式来约定变量。(使用全局变量定义函数_global.xx=N;)。具体步骤如下:
on(rollOver){
_root.number2.gotoAndStop(1);
gotoAndStop(2);
}
}
改为
on(release){
_global.bb=1;
_root.number2.gotoAndStop(1);
gotoAndStop(2);
}
on(rollOver){
if(bb==1){
_root.number2.gotoAndStop(1);
gotoAndStop(2);
}
}
on(rollOver){
}
如图所示:
这一段代码的含义是:当单击菜单按钮时布尔变量设置为1,所为菜单将被收起,并展开本菜单。当然代码中的第一个_root.number2.gotoAndStop(1);不写也可,只是为了程序的完整,但第二个_root.number2.gotoAndStop(1);不可不写。
on(release){
_global.bb=1;
_root.number1.gotoAndStop(1);
gotoAndStop(2);
}
on(rollOver){
if(bb==1){
_root.number1.gotoAndStop(1);
gotoAndStop(2);
}
}
on(rollOver){
}
如图:
注意:代码中number1、number2不准写混,不估失去了原本的效果。
第四个功能的实现。
如何才能实现当点击菜单之外区域时所有菜单收起功能?初步想法是改变全局变量bb的值,但通过什么样的事件来为bb重新赋值呢?在这点功能上我做了大量的试验,结果发现,我们可以在场景中放一个透明度为0的元件,通过代码来规定驱动鼠标点击事件,但是用影片剪辑元件还是用按钮元件呢?经过尝试发现应当用没有第一帧的按钮。具体步骤如下:
on(release){
if(bb==1){
_root.number1.gotoAndStop(1);
_root.number2.gotoAndStop(1);
}
_global.bb=0;
}
}
思想是:当点击它(该透明按钮)时,先进行一下判断,如果bb==1,也就是有一个菜单处于展开状态,那就让所有菜单收起,并把全局变量改为bb=0。这样不仅是菜单会被收起,而且只有当下一次再被单击时才会驱动展开任何一个按钮。
_root.but.useHandCursor = false;
意思为:把but透明按钮的手形标志屏蔽掉。之后选中该按钮,在属性面板中将其名称写成but.至此该功能实现完毕。
第五项功能的实现
一个菜单被展开后,当再一次点击菜单时收回。思路依旧是对bb这一全局变量的修改。具体步骤如下:
on(release){
gotoAndStop(1);
_global.bb=0;
}
意思为:回到第一帧,即将菜单收起,并将菜单关闭。如图:
意思为:回到第一帧,即将菜单收起,并将菜单关闭。如图:
用同样方法修改菜单number2。如图:
至此第五项功能实现完毕。
第六项功能的实现
二级乃至于更多级菜单的制作。
这一功能相对繁琐了一些,但并不是很难。要完成的内容有二,其一是要实现二级菜单本身;其二,是要照顾到它与同级其他菜单的操作上的关系。比如当鼠标经过其他操作按钮时,二级菜单应自动收起。具体步骤如下:
选中该按钮,按F8将其转换为影片剪辑,命名为number12,并将属性中的名称改为也number12。双击进入该影片剪辑,新建三个图,并把图层2拖拉到图层1之下。分别为各图层创建空白关键帧。为图层2制作一个菜单的背景图形。并分别为图层3和图层4导入相应按钮。整体效果如图:
on(rollOver){
_root.number1.number12.gotoAndStop(2);
}
}
on(release){
getURL("http://www.sina.com.cn","_blank");
_root.number1.gotoAndStop(1);
}
}
及
on(release){
getURL("http://www.sohu.com","_blank");
_root.number1.gotoAndStop(1);
}
}
之后,在第一帧处填写代码为:stop();
做到这里,二级菜单本身的基本功能做完了,但还要考虑到它同其他菜单的关系。
on(rollOver){
_root.number1.number12.gotoAndStop(1);
}
}
这样这两个按钮的完整代码应为:
on(release){
getURL("http://www.sohu.com","_blank");
_root.number1.gotoAndStop(1);
}
on(rollOver){
_root.number1.number12.gotoAndStop(1);
}
}
on(rollOver){
}
功能便是当鼠标移到这两个按钮上时,关闭二级菜单。
至此第六项功能也编写完毕。
插入表情