在 Movieclip 或 Sprite 中存储变量 [英] Store variable in Movieclip or Sprite
问题描述
如何将数据添加到动态创建的 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;}函数 doSomething(e:Event):void{跟踪(e.target.storedData.itemNumber);}提前致谢.
幸运的是,在 AS3 中,MovieClip 类被定义为动态类(只有影片剪辑是,精灵不是).在已定义为动态的类中,您可以通过标准变量赋值语句向该类的任何实例添加新的动态实例.
var myInstance:DynamicClass= new DynamicClass();myInstance.foo = "你好世界";//这不会导致任何编译时错误跟踪(myInstance.foo);//返回你好世界
EA-SY ^_^
示例
现在让我们动态创建多个 MovieClip,然后更改其中一个的属性.
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["按钮" + 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);//在 AS3 中,当您创建 MovieClip 时,它会保留在内存中并且不会在舞台上看到,直到您调用 addChild(_mc)按钮[i] = _mc;}
然后您就可以动态地享受影片剪辑的乐趣:
button[2].graphics.beginFill(0x000000);按钮[2].graphics.drawCircle(100, 200, 10);按钮[2].graphics.endFill();
How can you add data to a dynamically created MovieClip/Sprite so that the data can be accessed later on an event coordinating to that MovieClip/Sprite?
Example Code:
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); }
Thanks in advance.
Luckily for you, in AS3, the MovieClip class is defined as a dynamic class (and only movie clips are, sprites not). In a class that has been defined as dynamic, you can add a new dynamic instance to any instance of that class via a standard variable assignment statement.
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
Now let's create dynamically several MovieClips and then change a property of one of them.
AS2 syntax:
for(var i:Number = 0; i < 10; i++){
_root.createEmptyMovieClip("button" + i, _root.getNextHighestDepth());
}
Then you could call your movie clip directly :
button3._x = 100;
button3._y = 300;
or dynamically by using this :
this["button" + i]._x = 100;
this["button" + i]._y = 300;
In AS3, it is quite different (and there would be many ways to do it).
AS3 syntax:
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;
}
Then you can have some fun with your movie clips, dynamically :
button[2].graphics.beginFill(0x000000);
button[2].graphics.drawCircle(100, 200, 10);
button[2].graphics.endFill();
这篇关于在 Movieclip 或 Sprite 中存储变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!