2013-05-02 22 views
0

嘿想知道是否有人可以帮助我,我想添加一个移动剪辑的负载,并使他们可以点击到舞台上的行动脚本3,我可以找出它们的间距后来我就不断收到错误,同时试图以此来增加他们:添加影片剪辑与for循环动作脚本3

for(var x:int = 1; x <= 10; x++) 
     { 

      var this["cardPrint"+x] :MovieClip = new this["card_"+x](); 
      this.addChild(this["cardPrint"+x]); 
      this["cardPrint"+x].addEventListener(MouseEvent.CLICK, this["click_"+x]); 

     } 

在正确的方向的一个点,将有助于很多 谢谢

+0

您的“cardPrint”movieclip是否已存在于库文件中 - 您是否在尝试创建该实例? – whodeee 2013-05-02 19:01:00

+0

我正尝试创建“cardPrint”的实例 – user2344403 2013-05-02 19:07:13

回答

0

this是指示当前类范围指示符。所以this["cardPrint"+x]实际上是试图找到一个具有该名称的变量,但是你不能声明一个已经是引用的变量。

做你想做什么的唯一方式是这样的:

public dynamic class Foobar 
{ 
    public function Foobar() 
    { 
     for(var x:int = 1; x <= 10; x++) 
     { 
      this["cardPrint"+x] = new this["card_"+x](); 
      this.addChild(this["cardPrint"+x]); 
      this["cardPrint"+x].addEventListener(MouseEvent.CLICK, this["click_"+x]); 
     } 
    } 
} 

的关键是类dynamic。这允许您在运行时创建变量名称并使用scope["varName"]语法以字符串形式创建它们。如果您是在Flash Pro的时间线上完成此操作,那么您可以按照您的意愿完成这项任务。您最好在循环中创建对象并将它们存储在数组中以便以这种方式访问​​它们,而不是使用上述语法。

创建的每个对象的数据类型将与实例化的对象相同,因此您将无法将其设置为MovieClip或类似。

"card_"+x也需要是一个可实例化的对象(一个Class)。如果不是的话,你不能实例化它,它总会出错。

我确实想告诫你,这是一个很糟糕的方式把它放在一起。错误的空间非常大,使用这种语法很难做到,并且难以在代码中读取。

+0

谢谢我将回到绘图板并重新开始,我刚刚开始使用as3,再次感谢您 – user2344403 2013-05-02 19:12:09

+0

没问题。我强烈建议尝试将每个对象存储在一个数组中(或者甚至是一个通用的“Object”),而不是这样做。通常,使用'this [“varName”]'语法用于检索,而不是设置。显然也有例外,但你所要做的一般最好是通过数组/矢量来处理。 – 2013-05-02 20:46:17

+0

再次感谢你,这就是我目前正试图做的,我刚刚开始,非常感谢你 – user2344403 2013-05-02 21:51:48