Actionscript 3 1021:我的操作脚本中存在重复的函数定义

Actionscript 3 1021:我的操作脚本中存在重复的函数定义,actionscript-3,flash,actionscript,flash-cs5,flash-cs4,Actionscript 3,Flash,Actionscript,Flash Cs5,Flash Cs4,这是我上一个问题() 我正在制作一个互动flash项目…它有17个独立的场景 介绍场景 “主序列” 15个单独的标题歌曲页 我的第一个问题是“主序列”有15个按钮,我需要将它们链接到15个单独的场景…我使用以下代码 TD_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); s_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);

这是我上一个问题()

我正在制作一个互动flash项目…它有17个独立的场景

  • 介绍场景
  • “主序列”
  • 15个单独的标题歌曲页
我的第一个问题是“主序列”有15个按钮,我需要将它们链接到15个单独的场景…我使用以下代码

    TD_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    s_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    ats_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    iyk_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    hms_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    tf_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    hd_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    ld_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    ll_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    ts_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    ipsy_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    ysm_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    ihm_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    iss_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    tl_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    function mouseDownHandler(event:MouseEvent):void {
   var nameOfButton:String=event.currentTarget.name;
   if (nameOfButton=="TD_g") {
    gotoAndStop(1, "Tweedlee_Dee");
} else if (nameOfButton=="s_g") {
    gotoAndStop(1, "Sincerely");
} else if (nameOfButton=="ats_g") {
    gotoAndStop(1, "Ain’_that_a_shame");
} else if (nameOfButton=="iyk_g") {
    gotoAndStop(1, "I_hear_you_knocking");
} else if (nameOfButton=="hms_g") {
    gotoAndStop(1, "Hearts_made_of_stone");
} else if (nameOfButton=="tf_g") {
    gotoAndStop(1, "Tutti_fruiti");
} else if (nameOfButton=="hd_g") {
    gotoAndStop(1, "Hound_Dog");
} else if (nameOfButton=="ld_g") {
    gotoAndStop(1, "Little_darlin");
} else if (nameOfButton=="ll_g") {
    gotoAndStop(1, "Louie_Louie");
} else if (nameOfButton=="ts_g") {
    gotoAndStop(1, "Twist_and_shout");
} else if (nameOfButton=="ipsy_g") {
    gotoAndStop(1, "I_put_a_spell_on_you");
} else if (nameOfButton=="ysm_g") {
    gotoAndStop(1, "You_shook_me");

} else if (nameOfButton=="ihm_g") {
    gotoAndStop(1, "I_can_hear_music");

} else if (nameOfButton=="iss_g") {
    gotoAndStop(1, "I_shot_the_sheriff");

} else if (nameOfButton=="tl_g") {
    gotoAndStop(1, "Tainted_love");
}
    }
当我运行该序列时,我得到以下15个错误全部
1021:重复函数定义。来源:函数mouseDownHandler(事件:MouseEvent):void{

我尝试更改
。\u g.addEventListener(MouseEvent.MOUSE\u DOWN,mouseDownHandler);
以在每个DownHandler ex旁边包含一个唯一的
TD\u g.addEventListener12(MouseEvent.MOUSE\u DOWN,mouseDownHandler1);
。我仍然收到15个错误

谢谢


另外,我还想在动作脚本的某个地方插入
stop();
,这样,在为这个场景播放动画之后,人们就有机会导航并单击按钮,而不是“跳转”到下一个场景!

我个人更喜欢使用哈希映射/字典来处理这样的名称/值对。 因此,您的代码可以写成:

var buttonMap:Dictionary = new Dictionary();
buttonMap["TD_g"] = "Tweedlee_Dee";
buttonMap["s_g"] = "Sincerely";
buttonMap["ats_g"] = "Ain’_that_a_shame";
buttonMap["iyk_g"] = "I_hear_you_knocking";
buttonMap["hms_g"] = "Hearts_made_of_stone";
buttonMap["tf_g"] = "Tutti_fruiti";
buttonMap["hd_g"] = "Hound_Dog";
buttonMap["ld_g"] = "Little_darlin";
buttonMap["ll_g"] = "Louie_Louie";
buttonMap["ts_g"] = "Twist_and_shout";
buttonMap["ipsy_g"] = "I_put_a_spell_on_you";
buttonMap["ysm_g"] = "You_shook_me";
buttonMap["ihm_g"] = "I_can_hear_music";
buttonMap["iss_g"] = "I_shot_the_sheriff";
buttonMap["tl_g"] = "Tainted_love";

TD_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
s_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ats_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
iyk_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
hms_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
tf_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
hd_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ld_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ll_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ts_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ipsy_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ysm_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
ihm_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
iss_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
tl_g.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);

function mouseDownHandler(event:MouseEvent):void {
    gotoAndStop(1, buttonMap[event.currentTarget.name]);
}

但这仍然不能解决您的问题。错误表明您在代码的其他地方定义了
函数mouseDownHandler
。单击编译器错误中包含错误的行,找到重复的代码。暂时对其进行注释,然后找出它最初被复制/粘贴的原因,并对其进行改进/修复。HTH

好的,我找到了…我有15个独立的场景(每首歌一个),它们都有一个按钮,上面有以下代码
stop();“uniqueinstance”。addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler);函数mouseDownHandler(event:MouseEvent):void{gotoAndStop(525,“Main_Sequence”)}
这些应该会将人们送回主序列中动画播放完毕的点,人们可以单击以访问各个页面……这不再起作用,显然需要在每个场景动作脚本页面上进行更改???@user2278533看起来像是从o复制/粘贴了代码将一个帧设置为所有其他帧,并更改了实例名称,但将处理程序函数保留为actionscript中不允许使用的相同名称。您有多个选项:1.保持它不干净,并为每个按钮设置单独的侦听器,但至少更改处理程序:
TD_g.addEventListener(MouseEvent.MOUSE_DOWN,TD_gMouseDownHandler);函数TD_gMouseDownHandler(e:MouseEvent):void{Tweedlee_Dee}
s_g.addEventListener(MouseEvent.MOUSE_DOWN,s_gMouseDownHandler);函数s_gMouseDownHandler(e:MouseEvent):void{gotoAndStop(1,“真诚”)}@user2278533 2.让所有的按钮实例在所有帧中都可用,尽管它们在视图中/只能在需要的帧上单击(这样,在添加侦听器时,您将不会获得空对象引用)您可以像上面的代码一样在一个帧中一次性设置所有鼠标处理程序。3.与2类似,但如果不想让实例在所有帧上都可用,请使用event.RENDER的事件处理程序并使用stage.invalidate()…关于这个技巧有很多,但对你来说没有2那么简单我不是很清楚..我对“主页”按钮有单独的实例名,因此每个页面的代码现在看起来像…
stop();td_Home.addEventListener(MouseEvent.MOUSE_DOWN,td_homemouseDownHandler);函数td_homemouseDownHandler(事件:MouseEvent):void{gotoAndStop(525,“Main_Sequence”);}
一切正常,没有编译器代码错误,但是(请参见下一条注释)当我去“测试电影”时,加载它会花费很长时间(有时不会…)&当它正常工作时,播放第一个场景,然后当它到达“主序列”时“它启动动画的第一部分,然后frezess出现以下错误类型error:error#1009:无法访问空对象引用的属性或方法。在music_Sheet_project_15_fla::MainTimeline/frame91()…在第91帧我应该查找什么?