2013-05-07 74 views
0

我試圖通過movieclip裏面的循環來獲取getChildByName工作。getChildByName mc內循環

在庫上我有一個名爲PlayScreen的動畫片段,在PlayScreen裏面我有另一個名爲Bg的動畫片段。 PlayScreen由MainClass(類文檔)放置,PlayScreen與MainRun類相鏈接。將Bg動畫片段從庫中手動添加到PlayScreen中。

這是我的MainRun類。

public class MainRun extends MovieClip 
    { 
     public var flyClone:Array; 
     public var newFly:Fly_MC; 
     public var spX:Number = 550; 
     public var spY:Number = 400; 

     public function MainRun() 
     { 
      flyClone = new Array(); 
      for(var i:int=0; i<10; i++) 
      { 
       newFly = new Fly_MC(Math.random()* spX, Math.random()* spY); 
       flyClone.push(newFly); 
       addChild(newFly); 
       newFly.name = "fly_" + i; 
      } 
      //... 

      bla(); 
     } 

在這裏我不能使getChildByName正常工作,並返回;錯誤#1009:無法訪問空對象引用的屬性或方法。 at MainRun/bla()

 public function bla():void 
     { 
      for(var j:int=0; j< numChildren; j++) 
      { 
       getChildByName("fly_" + j).addEventListener(Event.ENTER_FRAME, randomMove); 
       //... 
      } 
     } 

有什麼建議嗎?

回答

0

我幾乎可以肯定你有一個孩子,是不是一隻蒼蠅。

public function bla():void 
{ 
    for(var j:int=0; j< numChildren; j++) 
    { 
     var fly : Fly_MC = getChildByName("fly_" + j) as Fly_MC; 
     if(fly) 
     { 
      fly.addEventListener(Event.ENTER_FRAME, randomMove); 
     } 
    } 
} 

爲什麼不乾脆:

for each(var fly : Fly_MC in flyClone) 
{ 
    fly.addEventListener(Event.ENTER_FRAME, randomMove); 
} 

或更好

addEventListener(Event.ENTER_FRAME, randomMoveFlies); 

public function randomMoveFlies(e:Event):void 
{ 
    for each(var fly : Fly_MC in flyClone) 
    { 
    //move flies; 
    } 
} 
+0

是的!你是對的!我懂了。因此,罪魁禍首是飛行以外的一個孩子。 – Momo 2013-05-07 14:43:13

+0

不用客氣。所有人都歡迎飛翔的領主。 – Discipol 2013-05-07 18:18:25

1

您的MovieClip對象的名稱屬性必須是一個字符串值,但是您要在其中放置一個int。 嘗試添加String(j);

最好使用您的flyClone數組,而不是僅僅通過名稱獲取對象。 圖片如果您將其他任何內容添加到DisplayList(addChild),將會發生什麼情況。

for(var j:int=0; j< flyClone.length; j++) 
{ 
    flyClone[j].addEventListener(...); 
} 
+0

「fly_」 +我會自動的字符串。當你連接一個字符串時,它會被轉換爲as3 – RafH 2013-05-07 14:07:10

+0

啊!爲什麼我沒有想到這一點。傻我。使用數組更好,豎起大拇指!但即時通訊只是好奇,使用字符串仍然使#1009錯誤。有沒有辦法使用getChildByName? – Momo 2013-05-07 14:32:16

0
for(var j:int=0; j< flyClone.length; j++) 
{ 

    (flyClone[j] as MovieClip).addEventListener(Event.ENTER_FRAME, randomMove); 
}