基本上,我有2个带一些代码的movieclip对象,目前仅用于跟踪它们。单击时,蓝色圆圈将显示为“蓝色”,单击时,红色圆圈将显示为“红色”。从理论上讲,这很有效,直到我添加了一个人口环,这又增加了人口环。那么每种颜色只有一种可以正常工作,其余的只是“模拟”圆圈。我希望每个圈子都能告诉我他们的颜色。
这是我的.fla代码:
import flash.events.MouseEvent;
BlueBall.addEventListener(MouseEvent.CLICK, fun1)
function fun1(e:MouseEvent){
trace("Blue!");
}
RedBall.addEventListener(MouseEvent.CLICK, fun2)
function fun2(e:MouseEvent){
trace("Red!");
}
这是.as文件中的填充循环:
private function PopulateCircles():void
{
for (var i:int=0; i < 10; i++)
{
var blueCircle:BlueCircle = new BlueCircle();
this.addChild(blueCircle);
var redCircle:RedCircle = new RedCircle();
this.addChild(redCircle);
}
}
tldr;如何使点击事件发生在每个新填充的圈子上?
答案 0 :(得分:1)
实际上很容易。就像您订阅方法以侦听预先设计的实例的事件一样,您可以通过临时变量引用进行订阅。只要变量包含引用(或C ++术语中的指针),您就可以对实例进行寻址,并可以对预先设计的 MovieClip 做任何事情:
private function PopulateCircles():void
{
var aRed:RedCircle;
var aBlu:BlueCircle;
for (var i:int = 0; i < 10; i++)
{
// If there are no mandatory constructor arguments,
// you can omit the () brackets.
aRed = new RedCircle;
aBlu = new BlueCircle;
// Disperse clips to random places.
aBlu.x = 500 * Math.random();
aBlu.y = 500 * Math.random();
aRed.x = 500 * Math.random();
aRed.y = 500 * Math.random();
// Subscribe methods to newly created instances.
aRed.addEventListener(MouseEvent.CLICK, fun2);
aBlu.addEventListener(MouseEvent.CLICK, fun1);
// You're operating inside 'this' object,
// no need to explicitly point it out.
addChild(aRed);
addChild(aBlu);
}
}