AS3: добавление функции в цикл заполнения - PullRequest
0 голосов
/ 01 июля 2018

В основном у меня есть 2 объекта movieclip с некоторым кодом, в настоящее время я просто отслеживаю их. Синие кружки при нажатии скажут «синие», а красные при нажатии - «красные». Это прекрасно работает в теории, пока я не добавлю популяционный цикл, который добавляет больше из них. Тогда только 1 из каждого цвета корректно работает, остальные - просто фиктивные круги. Я хочу, чтобы каждый круг говорил мне свой цвет.

Это мой код для .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 голосов
/ 01 июля 2018

Довольно просто, на самом деле. Подобно тому, как вы подписываете метод для прослушивания событий предварительно созданных экземпляров, вы можете подписаться через временные ссылки на переменные. До тех пор, пока переменная содержит ссылку (или указатель в терминах 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...