0

我是动作脚本 3 的菜鸟,所以请原谅这个详细的帖子!(和代码发布错误)

我正在制作一个交互式 Flash 项目......它有 17 个独立的场景......

  • 介绍场景
  • “主序列”
  • 15个单独的标题歌曲页面

我已经编写了 Intro-->“main” 序列的脚本,没有任何问题....

我的问题是“主序列”有 15 个按钮,我需要将它们链接到 15 个单独的场景......我尝试了两组不同的代码(见下文)并不断收到编译器错误......我会如果有人能告诉我这两种格式中哪一种最适合我的目的以及我到底做错了什么......

代码 1:这是我用来将各个页面链接回主序列的修改

TD_g.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler1);
function mouseDownHandler1(event:MouseEvent):void {

gotoAndStop(1,"Tweedlee_Dee");
}
  s_g.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler2);
function mouseDownHandler2(event:MouseEvent):void {

gotoAndStop(1,"Sincerely");
}
      ats_g.addEventListener(MouseEvent.MOUSE_DOWN,mouseDownHandler3);
  function mouseDownHandler3(event:MouseEvent):void {

gotoAndStop(1,"Ain’_that_a_shame");

...重复 15 次 ...该 _g部分是指我分配给主序列上每个按钮的唯一实例名称...我更改了每个按钮,#因为MouseDownHandlr我在某处读到每个事件必须不同(?) ..每次我测试场景时,我都会得到以下结果......

TypeError:错误 #1009:无法访问空对象引用的属性或方法。在 music_Sheet_project_14_Main_Sequence_fla::MainTimeline/frame1( ...然后场景以鼠标悬停效果开始并且它的动画随后是鼠标悬停效果但是如果我单击它们应该返回错误的按钮(?)不会产生“反应”

...每次我测试电影(只用那个短代码!)我得到以下...

14 编译器错误

全部 1021:重复的函数定义。资源 :function mouseDownHandler(event:MouseEvent):void {

..所以我尝试了不同的路线...

**Code2 **这是我在尝试修复第一个代码时发现的风格不同的代码

stop();
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");
}

...这继续 15 次,包括第 64 行

{
else if (nameOfButton=="ysm_g");
{
 gotoAndStop(1, "You_shook_me");

当我尝试运行它时,我得到以下...

“1083:语法错误:否则是意外的。来源else if (nameOfButton=="ysm_g");

当我查找此内容时,我收到有关语法错误的建议...但是为什么会选择这一行而不是所有其他行...我已尝试重新键入和重新格式化,但我一直收到该错误...

*这些代码中哪一个最适合使用?(为什么它不起作用???)任何/所有建议和帮助将不胜感激......谢谢!*

4

2 回答 2

0

问题是在 else 语句之前没有相应的右大括号。此外,您在 else 末尾有分号,这会使事情变得混乱:

{
else if (nameOfButton=="ysm_g");
{
 gotoAndStop(1, "You_shook_me");

应该

{
//...Whatever code goes here
}
else if (nameOfButton=="ysm_g")
{
   gotoAndStop(1, "You_shook_me");
}
于 2013-04-14T01:28:03.940 回答
0

如果将对象链接到要触发的场景的名称,则可以避免整个 if-elseif 混乱。这更容易阅读和维护,因为所有配置都是在下面的 init() 方法中完成的。方法 setSceneByTarget() 是公开的,因此您可以在运行时添加更多项目。

public class Main extends MovieClip
{
    private var _scenesByTarget:Dictionary;
    public function Main()
    {
        _scenesByTarget = new Dictionary(true);
        //call init() or hook it to ADDED_TO_STAGE event if you want
    }
    public function init():void
    {
        //add your listeners here like this:

        //myItem1.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
        //setSceneByTarget(myItem1, myItem1Scene);

        //myItem2.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
        //setSceneByTarget(myItem2, myItem2Scene);

        //...
    }

    public function setSceneByTarget(targetObj:Object, targetScene:String):void
    {
        _scenesByTarget[targetObj] = targetScene;
    }
    private function jumpToSceneByTarget(targetObj):void
    {
        if (_scenesByTarget[targetObj] != null) {
            gotoAndStop(1, _scenesByTarget[targetObj]);
        }
    }
    private function onMouseDown(evt:MouseEvent):void
    {
        jumpToSceneByTarget(evt.target);
    }
}
于 2013-04-14T17:00:43.630 回答