如何将数据添加到动态创建的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); }
提前致谢.
幸运的是,在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)
归档时间: |
|
查看次数: |
10785 次 |
最近记录: |