2011-04-18 51 views
1

嗨,我做了一個自定義類,在這裏我想創建一個影片剪輯的x的實例。但下面不工作:AS 3.0動態實例名稱

package {

import flash.display.MovieClip; 
public class CustomClass extends MovieClip { 

    public function CustomClass(amount:uint) { 
     var Collector:Array = new Array(); 

     //Add and position Tiles to stage. 
     for (var i:uint = 1; i <= amount; i++){ 
      var newMovieClip:MovieClip = new MovieClip; 
      newMovieClip.y = amount * 10; 
      Collector.push(newMovieClip); 
     } 
     addChild(Collector); 
    } 
} 

}

我想將它們放置在時間軸上與

 
var customClass_mc:CustomClass = new CustomClass(10); 
addChild(customClass_mc); 

//try to trace the x position of one of the instances. 
trace(customClass_mc.Collector[5].x); 

我不斷收到錯誤:場景1,圖層「圖層1」,幀1,第5行1119:通過具有靜態類型CustomClass的引用訪問可能未定義的屬性收集器。

回答

1

我發現了另一個我自己的答案,我認爲更好!

你不需要的容器都沒有。

當您使用以下

package { 

    import flash.display.MovieClip; 
    public class CustomClass extends MovieClip { 

     public function CustomClass(amount:uint) { 

      //Add and position Tiles to stage. 
      for (var i:uint = 1; i <= amount; i++){ 
       var newMovieClip:MovieClip = new MovieClip; 
       newMovieClip.y = amount * 10; 
       newMovieClip.name = "clip"+i; 
       addChild(newMovieClip); 
      } 
     } 
    } 
} 

不,我可以通過使用存取權限的影片剪輯:

var customClass_mc:CustomClass = new CustomClass(10); 
addChild(customClass_mc); 

//try to trace the x position of the fifth instance. 
trace(customClass_mc.getChildByName("child5").y); 
2

首先,你需要聲明收集公衆:

public var Collector:Array = new Array(); 

您的收藏是一個數組,而不是一個顯示對象,因此它不能被添加到顯示樹。相反,您會將每個newMovieClip推送到Custom類的顯示中,並將它們放置在for循環中。然後,你不需要收集可言,因爲你可以針對使用getChildAt()的影片剪輯:

trace(customClass_mc.getChildAt(5).x); 
+0

神奇的getChildAt方法效果!除此之外,讓公共收藏家給我:1114:公共收藏只能在一個包中使用。好東西是我不再需要它了! – Tieme 2011-04-18 12:51:29

+2

對不起,我錯過了一些解釋。爲了像您在示例的最後一行那樣從類構造器外部訪問收集器,您必須將其設置爲類屬性。要做到這一點,你將它移到構造函數之外並添加'public'關鍵字。 – shanethehat 2011-04-18 13:52:10

+0

是的,這工作,太棒了! – Tieme 2011-04-20 12:18:39

0

變量「收藏家」是唯一可用的構造函數中你有它的方式。收藏家必須公開於時間線之外。最好的辦法是製作一個公共的getter方法來訪問它。所以像這樣:

import flash.display.MovieClip; 
public class CustomClass extends MovieClip { 

    private var Collector:Array = new Array(); 

    public function get Collector():Array 
    { 
     return Collector; 
    } 

    public function CustomClass(amount:uint) { 

     //Add and position Tiles to stage. 
     for (var i:uint = 1; i <= amount; i++){ 
      var newMovieClip:MovieClip = new MovieClip; 
      newMovieClip.y = amount * 10; 
      Collector.push(newMovieClip); 
     } 
     addChild(Collector); 
    } 
} 
+0

shanethehat的anwser工作,與你的我得到2錯誤:1067:隱式強制的數組類型值的一個不相關的類型flash.display:DisplayObject。 &1114:公共屬性只能在包內使用。 無論如何感謝 – Tieme 2011-04-18 12:54:56