添加到舞台后,AS3 Child为null

时间:2017-05-09 16:22:10

标签: actionscript-3 flash null addchild

我创建了一个子节点并将其添加到movieclip中,但是当我在另一个函数中访问其属性时,Animate会抛出一个错误#1009:无法访问空对象引用的属性或方法。

孩子有一个听众添加和删除没有任何困难,可以使用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;
    }
}

1 个答案:

答案 0 :(得分:0)

不确定您的问题是什么,但您可能会将Movieclip保留在数组中,如果您经常调用此更新函数,则实际上可能会更高效。

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;
    }
}