用这种方式建立的菜单要求你拒绝使用按钮的 on (rollOut) 事件。而改用 on(rollOver) 和灵活应用上层按钮对下层按钮的遮蔽作用。
首先,这也是最重要的一步:
建一个足够大的按钮(大到整个场景)。 将它放到最底层,以使它可以被其它按钮遮蔽,这样,当有其它按钮在它上面时,它的on(rollOver){} 事件就不会被触发。
它的作用是当鼠标离开菜单的时候关闭子菜单。这是它的代码:
on (rollOver) {
hideMenu();
}
hideMenu 函数:
function hideMenu() {
for (i in this) {
if (this[i].over == true) {
this[i].gotoAndPlay("hide");
}
}
}
它对整个当前MC(这里指_root)进行搜索,如果发现它是打开的( .over == true ),则让它跳到关闭的帧播放(.gotoAndPlay("hide");)
变量.over = true 将在子菜单的MC帧中设置。它向搜索引擎表明子菜单当前是打开的。所以它写在了第2帧中。也就是打开子菜单播放动画的第一帧。当然当关闭子菜单(播放关闭子菜单动画时)记得将它设置为 over = false 表明子菜单现在关闭了。这样搜索引擎就不会播放错误的动画。
第二步:
你需要解决当鼠标移离主菜单而移向子菜单时的保证子菜单没有受到影响(也就是没有被那个最大的放置在底层的按钮关闭)。所以你要在播放打开子菜单的第一帧的底层加上一个按钮(它只是一个隐藏的按钮,没有任何的动作)。加在最底层是因为它不能影响子菜单的按钮。这个按钮的区域应该和主菜单的按钮区域有一点点重叠(比较好使用),并且覆盖子菜单的选择区域。它会使你第一步建立的按钮在这个区域内失效,也就是说当用户的鼠标在这个区域内时,你的子菜单就不会被关闭。
第三步:
为你的主菜单的按钮加上动作:
on (rollOver) {
hideMenu();
mcMenu1.gotoAndPlay(2);
}
它首先关闭所有已打开的子菜单,然后播放和当前主菜单对应的子菜单打开的动画。不要将这个顺序反写了。
最后,
为了美观你的菜单,也就是让用户感觉在背后没有那么多起辅助作用的按钮,将你的那些辅助按钮(最大的第一步建的底层按钮和第二步建的按钮)设为不使用手形光标:
buA.useHandCursor = false;