传递参数函数 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;
免责声明:我用英文标识符替换了您的非英文标识符。您应该始终用英语编写代码。这使得不懂您的语言的人更容易阅读代码。习惯就好了。
解决方案的第二部分是 currentTarget
,Event
对象的 属性 引用了导致 Event
的对象。
我希望你现在能看到这是如何组合在一起的:
- 如果函数被调用,首先要找出是谁引起的,即
单击了什么对象。
- 了解事件的来源,使用该信息查找
您应该在字典中查找的框架。
- 转到该帧。
代码如下所示:
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
我想多次调用函数 "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;
免责声明:我用英文标识符替换了您的非英文标识符。您应该始终用英语编写代码。这使得不懂您的语言的人更容易阅读代码。习惯就好了。
解决方案的第二部分是 currentTarget
,Event
对象的 属性 引用了导致 Event
的对象。
我希望你现在能看到这是如何组合在一起的:
- 如果函数被调用,首先要找出是谁引起的,即 单击了什么对象。
- 了解事件的来源,使用该信息查找 您应该在字典中查找的框架。
- 转到该帧。
代码如下所示:
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