0

我是从 AS3 开始的,一开始,我看了很多教程,但现在看来我正在碰壁。

我的项目:

  • 我有一个主菜单 ( menu),其中包含一个menu_seul包含三个按钮 (btn_checkbtn_date)的子菜单 ( btn_com)。
  • 单击时,应显示不同的文本。
    我放入了三个不同的帧menu_seul(因为 1 是空的)。

有没有办法简化它,因为我只有一个 EventListener 调用...
如果没有,为什么我的代码不起作用?

谢谢你的帮助!

menu.addEventListener(MouseEvent.ROLL_OVER, menu_on, false, 0, true);
menu.addEventListener(MouseEvent.ROLL_OUT, menu_out, false, 0, true);

btn_com.addEventListener(MouseEvent.ROLL_OVER, btn_com_on, false, 0, true);
btn_com.addEventListener(MouseEvent.ROLL_OUT, btn_com_out, false, 0, true);
btn_date.addEventListener(MouseEvent.ROLL_OVER, btn_date_on, false, 0, true);
btn_date.addEventListener(MouseEvent.ROLL_OUT, btn_date_out, false, 0, true);
btn_check.addEventListener(MouseEvent.ROLL_OVER, btn_check_on, false, 0, true);
btn_check.addEventListener(MouseEvent.ROLL_OUT, btn_check_out, false, 0, true);

function menu_on(event:MouseEvent):void{
menu.gotoAndPlay(2);
}

function menu_out(event:MouseEvent):void{
menu.gotoAndPlay(25);
}

function btn_com_on(event:MouseEvent):void{
menu_seul.gotoAndPlay(2);
}

function btn_com_out(event:MouseEvent):void{
menu.gotoAndPlay(1);
}

function btn_date_on(event:MouseEvent):void{
menu_seul.gotoAndPlay(3);
}

function btn_date_out(event:MouseEvent):void{
menu.gotoAndPlay(1);
}

function btn_check_on(event:MouseEvent):void{
menu_seul.gotoAndPlay(4);
}

function btn_check_out(event:MouseEvent):void{
menu.gotoAndPlay(1);
}

再次感谢 !

4

2 回答 2

1

尝试这个:

创建一个函数来为按钮操作添加一个函数:

function addAction(target:*, event:String, action:Function, params:Array) {
    target.addEventListener(event, function (event:Event) { action(params); });
}

然后,为每个按钮的每个事件添加操作:

addAction(menu, MouseEvent.ROLL_OVER, menu.gotoAndPlay, [2]);
addAction(menu, MouseEvent.ROLL_OUT, menu.gotoAndPlay, [25]);
addAction(btn_com, MouseEvent.ROLL_OVER, menu_seul.gotoAndPlay, [2]);
addAction(btn_com, MouseEvent.ROLL_OUT, menu.gotoAndPlay, [1]);
...

如果您愿意,您可以创建一个数组来注册所有按钮及其操作:

var buttons:Array = [
    {button:menu, overAction:menu.gotoAndPlay, overActionParams:[2], outAction:menu.gotoAndPlay, outActionParams:[25]},
    {button:btn_com, overAction:menu_seul.gotoAndPlay, overActionParams:[2], outAction:menu.gotoAndPlay, outActionParams:[1]},
    {button:btn_date, overAction:menu_seul.gotoAndPlay, overActionParams:[3], outAction:menu.gotoAndPlay, outActionParams:[1]},
    {button:btn_check, overAction:menu_seul.gotoAndPlay, overActionParams:[4], outAction:menu.gotoAndPlay, outActionParams:[1]}
];

for each (var item:Object in buttons)
{
    addAction(item.button, MouseEvent.ROLL_OVER, item.overAction, item.overActionParams);
    addAction(item.button, MouseEvent.ROLL_OUT, item.outAction, item.outActionParams);
}

就这样!!

于 2012-12-28T13:39:28.683 回答
0

我解决了。实际上,我的代码并没有那么错,现在就是这样:

menu.addEventListener(MouseEvent.ROLL_OVER, menu_on, false, 0, true);
menu.addEventListener(MouseEvent.ROLL_OUT, menu_out, false, 0, true);

btn_com.addEventListener(MouseEvent.ROLL_OVER, btn_com_on, false, 0, true);
btn_com.addEventListener(MouseEvent.ROLL_OUT, btn_com_out, false, 0, true);
btn_date.addEventListener(MouseEvent.ROLL_OVER, btn_date_on, false, 0, true);
btn_date.addEventListener(MouseEvent.ROLL_OUT, btn_date_out, false, 0, true);
btn_check.addEventListener(MouseEvent.ROLL_OVER, btn_check_on, false, 0, true);
btn_check.addEventListener(MouseEvent.ROLL_OUT, btn_check_out, false, 0, true);

function menu_on(event:MouseEvent):void{
menu.gotoAndPlay(2);
}

function menu_out(event:MouseEvent):void{
menu.gotoAndPlay(25);
}

function btn_com_on(event:MouseEvent):void{
menu_seul.gotoAndPlay(2);
}

function btn_com_out(event:MouseEvent):void{
menu_seul.gotoAndPlay(1);
}

function btn_date_on(event:MouseEvent):void{
menu_seul.gotoAndPlay(3);
}

function btn_date_out(event:MouseEvent):void{
menu_seul.gotoAndPlay(1);
}

function btn_check_on(event:MouseEvent):void{
menu_seul.gotoAndPlay(4);
}

function btn_check_out(event:MouseEvent):void{
menu_seul.gotoAndPlay(1);
}

这只是我的对象,我只需在对象、出现和 AS 可导出名称之间给它们命名!所以,Flash 对我说他们不是恒定的(类)!

再次感谢你。

于 2012-12-29T13:42:27.167 回答