AS3:向人口循环中添加功能

时间:2018-07-01 14:47:33

标签: function actionscript-3 for-loop parent-child

基本上,我有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;如何使点击事件发生在每个新填充的圈子上?

1 个答案:

答案 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);
    }
}
相关问题