Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 在单个操作脚本中编写多个按钮(几乎相同)时出现问题_Actionscript 3_Flash_Actionscript_Flash Cs5_Flash Cs4 - Fatal编程技术网

Actionscript 3 在单个操作脚本中编写多个按钮(几乎相同)时出现问题

Actionscript 3 在单个操作脚本中编写多个按钮(几乎相同)时出现问题,actionscript-3,flash,actionscript,flash-cs5,flash-cs4,Actionscript 3,Flash,Actionscript,Flash Cs5,Flash Cs4,我是《动作脚本3》的不速之客,所以请原谅我的这篇详细帖子!(和代码发布错误) 我正在制作一个互动flash项目…它有17个独立的场景 介绍场景 “主序列” 15个单独的标题歌曲页 我已经编写了介绍-->“主”序列的脚本,没有任何问题 我的问题是“主序列”有15个按钮,我需要将它们链接到15个单独的场景…我尝试了两组不同的代码(见下文),并不断出现编译器错误…。如果有人能告诉我这两种格式中哪种最适合我的目的,我将不胜感激&我到底做错了什么 代码1:这是我用来将各个页面链接回主序列的修改 TD_

我是《动作脚本3》的不速之客,所以请原谅我的这篇详细帖子!(和代码发布错误)

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

  • 介绍场景
  • “主序列”
  • 15个单独的标题歌曲页
我已经编写了介绍-->“主”序列的脚本,没有任何问题

我的问题是“主序列”有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次。。。
\u g
部分是指分配给主序列上每个按钮的唯一的实例名称我更改了每个
鼠标下指针中的
,因为我在某处读到每个事件都必须不同(?) …每次我测试场景时,我都会得到以下结果

TypeError:错误#1009:无法访问空对象引用的属性或方法。 在music_Sheet_project_14_Main_Sequence_fla::Main Timeline/frame1(…然后场景以开始并执行动画,然后执行鼠标悬停效果,但如果单击按钮,则应返回错误(?)的按钮不会产生“反应”

…每次我测试这部电影(用这么短的代码!)我都会得到以下结果

14编译器错误

所有1021:重复的函数定义。源:
函数mouseDownHandler(事件: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意外。源代码
else if(按钮名称==“ysm_g”);

当我查到这一行时,我得到了语法错误的建议…但是为什么它会选择这一行而不是所有的其他行…我尝试过重新键入和重新格式化,但我不断地得到错误

*以下哪种代码最好使用?(为什么不起作用?)
任何/所有的建议和帮助都将不胜感激……谢谢!!!*

问题是在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");
}

如果将对象链接到要触发的场景的名称,则可以避免整个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);
    }
}

您好,感谢您的快速响应!!我删除了;但仍然收到一个编译器错误1083:语法错误:else是意外的。else if(nameOfButton==“ysm_g”)很抱歉,我没有正确地查看代码。我已编辑了我的答案以反映实际问题。谢谢,它可以工作!。但是现在我得到了…1021:重复的函数定义…来源:函数mouseDownHandler(事件:MouseEvent):void{….每首歌我都会收到15次…当电影加载时,按钮仍然不起作用…我的另一个相关问题是我把
stop()放在哪里
在该动作脚本上,以便页面动画加载按最后一个关键帧进行,该关键帧具有歌曲按钮和鼠标悬停效果…并停止,而不是立即“跳转”到下一个场景…再次感谢:)不确定,但您应该将此答案标记为已接受,并使用新代码提出一个新问题,因为这是一个单独的问题。请记住,您不能有两个名称相同的函数(这就是错误告诉您的)。不知道stop()-我不使用框架。请在此处跟进新问题(对于那些对结果好奇的人)因此myItem1将是按钮或实例?myItemScene将是场景名称?因此对于ex
TD_g.addEventListener(MouseEvent.MOUSE_DOWN,onMouseDown);setSceneByTarget(TD_g,Tweedlee_Dee);
意味着TD_g实例/按钮被单击,然后它将把人带到标记为Tweedlee_dee?的场景……你是说
init()\u scenesByTarget=new Dictionary(true);
…?不确定我应该在那里做什么!对于您的第一条评论:是的。对于每个要更改场景的可单击项,init方法中都有两行。字典将它们链接起来,jumpToSceneByTarget方法将处理其余的操作。对于您关于init与new dictionary的问题:以下是两个分离行。您创建了字典,然后调用init()。