在 Movieclip 或 Sprite 中存储变量 [英] Store variable in Movieclip or Sprite

查看:16
本文介绍了在 Movieclip 或 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆