2017-05-09 56 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” –