传递参数函数 MouseEvent

Pass an argumment function MouseEvent

我想多次调用函数 "clica",但要更改 gotoAndStop ("gotoAndStop(x)") 中的帧数。如何将值 x 传递给函数 clica?谢谢

 stop();

jogar.addEventListener(MouseEvent.CLICK, clica);

function clica(e:MouseEvent):void{
    gotoAndStop(2);
}

好的,您的目标是转到特定帧,具体取决于导致 MouseEvent 的原因。

一种方法是保存什么对象对应什么帧。 把它想象成一本电话簿。它将一个人与一个要呼叫的号码关联起来。

要在 actionscript 中创建这样的 "telephone book",您需要使用字典。首先像这样添加所有关联:

var object2frame:Dictionary = new Dictionary();
object2frame[play] = 2; // associate play with the number 2
object2frame[play2] = 3;

免责声明:我用英文标识符替换了您的非英文标识符。您应该始终用英语编写代码。这使得不懂您的语言的人更容易阅读代码。习惯就好了。

解决方案的第二部分是 currentTargetEvent 对象的 属性 引用了导致 Event 的对象。 我希望你现在能看到这是如何组合在一起的:

  1. 如果函数被调用,首先要找出是谁引起的,即 单击了什么对象。
  2. 了解事件的来源,使用该信息查找 您应该在字典中查找的框架。
  3. 转到该帧。

代码如下所示:

var object2frame:Dictionary = new Dictionary();
object2frame[play] = 2; // associate play with the number 2
object2frame[play2] = 3;

play.addEventListener(MouseEvent.CLICK, click);
play2.addEventListener(MouseEvent.CLICK, click);

function click(e:MouseEvent):void
{
    gotoAndStop(object2frame[e.currentTarget]);
}

这个问题还有其他解决方案。

假设 jogar 是一个 MovieClip(或任何动态 class 实例),您可以为其分配属性,例如单击时应导航到哪个框架,然后使用 event.currentTarget 在事件处理程序中检索其属性。例如:

jogar1.targetFrame = 1;
jogar2.targetFrame = 2;
jogar3.targetFrame = 3;

jogar1.addEventListener(MouseEvent.CLICK, clica);
jogar2.addEventListener(MouseEvent.CLICK, clica);
jogar3.addEventListener(MouseEvent.CLICK, clica);

function clica(e:MouseEvent):void {
    var targetFrame:int = e.currentTarget.targetFrame;
    gotoAndPlay(targetFrame);
}

您可以通过将设置包装在一个函数中来进一步减少它:

function setupJogar(jogar:MovieClip, targetFrame:int):void {
    jogar.targetFrame = targetFrame;
    jogar.addEventListener(MouseEvent.CLICK, jogarClick);
}

function jogarClick(e:MouseEvent):void {
    gotoAndStop(e.currentTarget.targetFrame);
}

setupJogar(jogar1, 1);
setupJogar(jogar2, 2);
setupJogar(jogar3, 3);
// ...etc