Сохранить переменную в Movieclip или Sprite - PullRequest
4 голосов
/ 08 августа 2009

Как вы можете добавить данные в динамически создаваемый MovieClip / Sprite, чтобы впоследствии к ним можно было получить доступ в случае события, координирующего этот MovieClip / Sprite?

Пример кода:

for(var i:int; i < xml.children(); i++){
    var button:MovieClip = new MovieClip();
    button.graphics.beginFill(0x000000);
    button.graphics.drawCircle(100 + 20 * i, 200, 10);
    button.graphics.endFill();
    button.addEventListener(MouseEvent.MOUSE_UP, doSomething);
    button.name = "item_"+i;
    <em>button.storedData.itemNumber = i;</em>
}

function doSomething(e:Event):void
{
    trace(e.target.storedData.itemNumber);
}

Заранее спасибо.

1 Ответ

6 голосов
/ 08 августа 2009

К счастью для вас, в AS3 класс MovieClip определен как динамический класс (и только ролики, а не спрайты). В классе, который был определен как динамический, вы можете добавить новый динамический экземпляр к любому экземпляру этого класса с помощью стандартного оператора назначения переменных.

var myInstance:DynamicClass= new DynamicClass();
myInstance.foo = "hello World"; // this won't cause any compile time errors

trace(myInstance.foo ); //returns hello World

EA-SY ^ _ ^

Exemple

Теперь давайте динамически создадим несколько мувиклипов, а затем изменим свойство одного из них.

Синтаксис AS2:

for(var i:Number = 0; i < 10; i++){
    _root.createEmptyMovieClip("button" + i, _root.getNextHighestDepth());
}

Тогда вы можете напрямую позвонить в ваш видеоклип:

button3._x = 100;
button3._y = 300;

или динамически, используя это:

this["button" + i]._x = 100;
this["button" + i]._y = 300;

В AS3 все совсем по-другому (и было бы много способов сделать это).

Синтаксис AS3:

var button:Array = new Array();

for (var i:Number = 0; i < 10; i++) {
    var _mc:MovieClip = new MovieClip();
    addChild(_mc); // in AS3 when you create a MovieClip, it remains in memory and won't be seen on stage until you call addChild(_mc)

    button[i] = _mc;
}

Тогда вы можете повеселиться с вашими клипами, динамически:

button[2].graphics.beginFill(0x000000);
button[2].graphics.drawCircle(100, 200, 10);
button[2].graphics.endFill();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...