2017-05-09 57 views
0

sI創建了一個子項並將其添加到動畫片段,但是當我在另一個函數中訪問其屬性時,Animate拋出錯誤#1009:無法訪問null的屬性或方法對象引用。添加到舞臺後,AS3子項爲空

孩子有一個聽衆添加和刪除沒有困難,並可以從顯示列表中刪除很好用removeChild,但顯然沒有其他與它相關的屬性(x,y等)。它就好像孩子已被添加到顯示列表,但沒有其他關聯的屬性?

孩子被轉換爲MovieClip,我嘗試添加一個監聽器(ADDED_TO_STAGE)以確保孩子在作爲顯示對象訪問其屬性之前在舞臺上可用。但是,沒有運氣。

我在我的遊戲中使用相同代碼的其他情況似乎可以正常工作。我不是專家,但我也並不陌生的ActionScript,而這一次莫名其妙的我...

創建子級代碼:

function createNPCtargets():void 
{ 
    for (var i:int=0 ; i<= npcs -1 ; i++) 
    { 
     var NPCtarget:MovieClip = new target_mc; 
     overlay_mc.addChild(NPCtarget); 
     NPCtarget.name = "target_" + i; 
     NPCtarget.addEventListener(MouseEvent.CLICK, fireShot); 
    } 
} 

代碼拋出錯誤(npcObject是罰款):

function moveNPC():void 
{ 
    for (var i:int=0 ; i<= npcs -1; i++) 
    { 
     overlay_mc.getChildByName("target_" + i).x = npcObject.x; 
     overlay_mc.getChildByName("target_" + i).y = npcObject.y; 
    } 
} 
+0

如果你在這個循環中添加trace(overlay_mc.getChildByName(「target_」+ i))?它是否找到對象? – 3vilguy

+0

好主意3vilguy,我實際上在發佈前試過。奇怪的是,它的痕跡,沒有問題的對象本身,但第二個我添加了一個.X(或任何其他財產)到行的末尾,它拋出一個運行時錯誤...所以它似乎找到,沒有麻煩的對象,只是不能訪問它的任何屬性。 – user3600741

+0

Weirdz如果可以的話,如何將它轉換爲DisplayObject並檢查它是否爲空。你確定'npcObject'不是null? – 3vilguy

回答

0

不知道你的問題是什麼,但你可能看保持影片剪輯中的數組,實際上可能是更好的性能,如果你調用這個更新的功能很多。

var npcs:Array = []; 
function createNPCtargets():void 
{ 
    for (var i:int=0 ; i<= npcs -1 ; i++) 
    { 
     var NPCtarget:MovieClip = new target_mc; 
     overlay_mc.addChild(NPCtarget); 
     NPCtarget.addEventListener(MouseEvent.CLICK, fireShot); 
     npcs.push(NPCtarget); 
    } 
} 

function moveNPC():void 
{ 
    for (var i:int=0 ; i<= npcs.length ; i++) 
    { 
     npcs[i].x = npcObject.x; 
     npcs[i].y = npcObject.y; 
    } 
} 
+0

謝謝安德魯!絕對要調用更新函數,它是主遊戲循環的一部分。我給你的代碼一個鏡頭,這次彈出了一個不同的錯誤:錯誤#1010:一個術語是未定義的,沒有任何屬性。 這使我相信,主循環導致了問題:在moveNPC()函數被調用之前該陣列可以與孩子進行填充,導致錯誤。這很奇怪,因爲我測試了它是否被添加到舞臺上,而孩子們確實在那裏,只是空。 – user3600741

+0

數組解決方案是要走的路,getChildByName非常慢。像上面提到的3vilguy - 你試圖追蹤你的npcObject?也許這是造成問題的原因之一?因爲你的動畫片段現在應該可以訪問 – Philarmon

+0

你能發佈更多的代碼嗎?這是什麼「npcObject」 –