将变量存储在Movieclip或Sprite中

Tor*_*rez 4 actionscript-3

如何将数据添加到动态创建的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;
    button.storedData.itemNumber = i;
}

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

提前致谢.

afe*_*wcc 6

幸运的是,在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
Run Code Online (Sandbox Code Playgroud)

EA-SY ^ _ ^

为例

现在让我们动态创建几个MovieClip,然后更改其中一个的属性.

AS2语法:

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

然后你可以直接调用你的影片剪辑:

button3._x = 100;
button3._y = 300;
Run Code Online (Sandbox Code Playgroud)

或动态使用此:

this["button" + i]._x = 100;
this["button" + i]._y = 300;
Run Code Online (Sandbox Code Playgroud)

在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;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以动态地对你的电影剪辑有一些乐趣:

button[2].graphics.beginFill(0x000000);
button[2].graphics.drawCircle(100, 200, 10);
button[2].graphics.endFill();
Run Code Online (Sandbox Code Playgroud)