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
Flash 闪存AS3-鼠标事件_Flash_Actionscript 3_Actionscript_Flash Cs5 - Fatal编程技术网

Flash 闪存AS3-鼠标事件

Flash 闪存AS3-鼠标事件,flash,actionscript-3,actionscript,flash-cs5,Flash,Actionscript 3,Actionscript,Flash Cs5,这真是个愚蠢的问题,但我真的不知道如何解决我的问题 我有一个函数 public function backToSelect(evt:Event, i:Number):void { removeChild(back); switch(i) { case 1: removeChild(speel1); break; //etc

这真是个愚蠢的问题,但我真的不知道如何解决我的问题

我有一个函数

    public function backToSelect(evt:Event, i:Number):void
    {
        removeChild(back);
        switch(i)   {
            case 1:
                removeChild(speel1);
                break;
            //etc
        }
        gotoAndStop('home');

     }
我不知道如何调用这个函数。我试过了

        back.addEventListener(MouseEvent.CLICK, backToSelect(1));
但flash抱怨道:

1067: Implicit coercion of a value of type int to an unrelated type flash.events:Event.

我意识到我的错误,在执行
backToSelect(1)
时跳过了第一个参数(即事件1)。但是,我不知道应该在那里放置什么来正确调用我的函数。我尝试了一切,从
evt:MouseEvent
MouseEvent
和其他东西。什么都没用。提前谢谢

如果您希望调用特定函数,以下是执行此操作的方法:

  back.addEventListener(MouseEvent.CLICK, 
       function (evt:MouseEvent):void { backToSelect(evt, 1); } );
此包装函数语句是一个匿名函数,具有ActionScript所期望的MouseEvent.CLICK处理程序的确切签名。但是,正确的方法如下:

  // somewhere else in your class, presumably...
  function mouseEventHandler(evt:MouseEvent):void {
      backToSelect(evt, 1);
  }

  back.addEventListener(MouseEvent.CLICK, mouseEventHandler);

这将使您能够在以后需要时删除处理程序。

如果您希望调用特定函数,以下是执行此操作的方法:

  back.addEventListener(MouseEvent.CLICK, 
       function (evt:MouseEvent):void { backToSelect(evt, 1); } );
此包装函数语句是一个匿名函数,具有ActionScript所期望的MouseEvent.CLICK处理程序的确切签名。但是,正确的方法如下:

  // somewhere else in your class, presumably...
  function mouseEventHandler(evt:MouseEvent):void {
      backToSelect(evt, 1);
  }

  back.addEventListener(MouseEvent.CLICK, mouseEventHandler);

这将使您能够在以后需要时删除该处理程序。

因此Flash中的事件系统有点过时了-当您使用“addEventListener()”时,您所说的是“嘿,当您得到类型为X的事件时,将该事件传递给我提供的函数。该函数接受单个参数,这就是我正在侦听的事件。”

实际上,您并不是在“addEventListener()”中进行函数调用-您应该传入backToSelect,而不是backToSelect()。区别在于第一个函数是对该函数的引用-您不是说“立即调用此函数!”!你的意思是“把它放在一边,在事件发生时使用它。”

那么这会给您带来什么呢?这是一个对Flash环境不熟悉的人非常常见的问题,解决方案也不一定显而易见。您要做的是找到一种方法,将您的数据与鼠标单击的目标关联起来。最简单的方法就是这样:

public function backToSelect(evt:Event):void
    {
        removeChild(back);
        switch(e.currentTarget)   {
            case buttonOne:
                removeChild(speel1);
                break;
            //etc
        }
        gotoAndStop('home');

     }
如果没有更全面地了解您要做的事情,我很难更具体地建议您,但这是问题的根源。您可以将所有逻辑放入单击处理程序,也可以做一些更有趣的事情,例如创建一个将数字与按钮相关联的字典对象,然后只使用num=myDictionary[e.currentTarget]或其他什么


但是,是的,这正是核心所在。我希望这会有所帮助,如果您需要更具体的帮助,请告诉我!

因此Flash中的事件系统有点过时了-当您使用“addEventListener()”时,您所说的是“嘿,当您得到类型为X的事件时,将该事件传递给我提供的函数。该函数接受单个参数,这就是我正在侦听的事件。”

实际上,您并不是在“addEventListener()”中进行函数调用-您应该传入backToSelect,而不是backToSelect()。区别在于第一个函数是对该函数的引用-您不是说“立即调用此函数!”!你的意思是“把它放在一边,在事件发生时使用它。”

那么这会给您带来什么呢?这是一个对Flash环境不熟悉的人非常常见的问题,解决方案也不一定显而易见。您要做的是找到一种方法,将您的数据与鼠标单击的目标关联起来。最简单的方法就是这样:

public function backToSelect(evt:Event):void
    {
        removeChild(back);
        switch(e.currentTarget)   {
            case buttonOne:
                removeChild(speel1);
                break;
            //etc
        }
        gotoAndStop('home');

     }
如果没有更全面地了解您要做的事情,我很难更具体地建议您,但这是问题的根源。您可以将所有逻辑放入单击处理程序,也可以做一些更有趣的事情,例如创建一个将数字与按钮相关联的字典对象,然后只使用num=myDictionary[e.currentTarget]或其他什么


但是,是的,这正是核心所在。我希望这会有所帮助,如果您需要更具体的帮助,请告诉我!

您不能在股票事件侦听器中传递自定义参数。这是只有自定义事件才能做的。您不能在股票事件侦听器中传递自定义参数。这是只有自定义事件才能做的。这会起作用,但是这不是最佳做法。将函数文本放入addEventListener()中调用是一个非常不好的习惯,因为它使跟踪在何处发生的事情变得越来越困难。这被称为匿名函数闭包,虽然它在某些情况下是一种有用的技术,但如果您不了解所有的含义,则使用它是危险的。这里介绍的第一个解决方案正是这样做的我想,但我并不真的想使用它,因为这被认为是不好的做法。第二个函数并不能让我达到我所能说的任何地方;因为我必须创建多个函数才能达到4个不同的级别?或者我错了吗?我同意,这有点复杂。如果你能重写你的函数以符合事件处理程序签名s、 没问题。请记住,这可能会为您节省一些时间和精力,以避免代码重复,因此,如果您希望在两个不同的位置调用一段代码,我建议您将其放置在一个函数中,并在单独的事件处理程序中调用它,仅在您需要它的时候使用。这会起作用,但这不是最佳做法将操作文字输入到addEventListener()中调用是一个非常不好的习惯,因为它使跟踪在何处发生的事情变得越来越困难。这被称为匿名函数闭包,虽然它在某些情况下是一种有用的技术,但如果您不了解所有的含义,则使用它是危险的。这里介绍的第一个解决方案正是这样做的我想,但我并不真的想用它,因为它被认为是不好的做法