【问题标题】:AS3 Child is null after being added to stageAS3 Child 加入阶段后为空
【发布时间】:2017-10-08 01:52:00
【问题描述】:

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

孩子有一个监听器添加和删除没有困难,并且可以使用 removeChild 从显示列表中删除,但显然没有与之关联的其他属性(x、y 等)。好像孩子已经添加到显示列表中,但没有其他关联属性?

孩子被转换为一个电影剪辑,我尝试添加一个监听器 (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;
    }
}

【问题讨论】:

  • 如果在这个循环中添加trace(overlay_mc.getChildByName("target_" + i)); 会怎样?它找到对象了吗?
  • 好主意 3vilguy,我实际上在发布之前尝试过这个。奇怪的是,它可以毫无问题地跟踪对象本身,但是当我在行尾添加一个 .x (或任何其他属性)时,它会引发运行时错误......所以它似乎可以毫无问题地找到对象,只是无法访问其任何属性。
  • Weirdz 如果可行,如何将其转换为 DisplayObject 并检查它是否不为空。你确定 'npcObject' 不为空?

标签: actionscript-3 flash null addchild


【解决方案1】:

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

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

【讨论】:

  • 谢谢安德鲁!肯定会经常调用更新函数,它是游戏主循环的一部分。我试了一下你的代码,这次又弹出了一个不同的错误:Error#1010: A term is undefined and has no properties。这使我相信主循环导致了问题:在数组可以填充子元素之前调用 moveNPC() 函数,从而导致错误。不过这很奇怪,因为我测试了它是否首先添加到阶段,并且孩子确实在那里,只是 null。
  • 用数组的解决方案是要走的路,getChildByName 很慢。就像上面提到的 3vilguy - 你试过追踪你的 npcObject 吗?也许这是造成问题的原因?因为您的电影剪辑现在应该可以访问了
猜你喜欢
  • 2012-11-06
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 1970-01-01
相关资源
最近更新 更多