首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除子项和AS3 2025错误

删除子项和AS3 2025错误
EN

Stack Overflow用户
提问于 2015-01-19 07:25:18
回答 2查看 287关注 0票数 0

尝试从数组中删除项目符号,但似乎无法摆脱此错误。

代码语言:javascript
复制
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
    at flash.display::DisplayObjectContainer/removeChild()
    at Template/gameLoop()

我正在尝试从数组中移除子弹,如果它被击中或超过某个特定的x value

代码语言:javascript
复制
for (var oo:int=0;oo<bArray2.length;oo++)
    {
        bullet2=bArray2[oo];
        if(bullet2.x<500 && bullet2!=null && bArray2[oo]!=null) 
            {
                bullet2.x += 3;  
            } 
            else 
            {
                removeChild(bullet2);
                bArray2.splice(oo, 1);

            }


                if(boss.hitTestObject(bArray2[oo])&& bArray2[oo]!=null && boss!=null) 
                {

                    removeChild(bArray2[oo]);
                    bLives-=1;
                    bArray2[oo]=null;
                    bArray2.splice(oo, 1);


                }//end if


    }
EN

回答 2

Stack Overflow用户

发布于 2015-01-19 09:02:27

看看removeChild()的定义:

从DisplayObject实例的子级列表中删除指定的子级DisplayObjectContainer实例。

因此,为了让函数成功执行,它应该在我们将删除的子级( DisplayObject )的DisplayObjectContainer父级上执行,但是如果我们在这个父级之外,编译器将把当前的DisplayObjectContainer作为父级,下面的例子可以更好地理解:

代码语言:javascript
复制
trace(this);    // gives : [object MainTimeline]

var parent_1:MovieClip = new MovieClip()
    addChild(parent_1);             
    // add the parent_1 to the MainTimeline

var child_1:MovieClip = new MovieClip()
    addChild(child_1);              
    // add the child_1 to the MainTimeline

var child_2:MovieClip = new MovieClip()
    parent_1.addChild(child_2);     
    // add the child_2 to parent_1 which is a child of the MainTimeline         

removeChild(child_1);               
// remove child_1 from the MainTimeline : OK

try {
    removeChild(child_2);           
    // remove child_2 from the MainTimeline : ERROR
} catch(e:*){
    trace(e);                       
    // gives : ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
}

这里我们知道child_2不是MainTimeline的孩子,这就是为什么我们得到错误#2025,因为提供的DisplayObject ( child_2 )不是调用者( MainTimeline )的孩子。

因此,要删除child_2 MovieClip,我们必须从它的父级parent_1调用removeChild()

代码语言:javascript
复制
parent_1.removeChild(child_2); // OK

为了简化或者如果我们不知道它的父元素,你可以这样写:

代码语言:javascript
复制
child_2.parent.removeChild(child_2);

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2015-01-19 07:44:30

尝尝这个

代码语言:javascript
复制
for (var index:int= bArray2.length - 1; index >= 0; --index) {
    bullet2 = bArray2[index];

    // you don't even need this check 
    // if you are not setting elements to null in the array
    if (!bullet2) {
        bArray2.splice(index, 1);
        continue;
    }

    // move the bullet
    if (bullet2.x < 500) {
        bullet2.x += 3;  
    } 

    // if the bullet hit the boss or is out of screen remove it
    if((boss && boss.hitTestObject(bullet2)) || bullet2.x > 500) {
        if (this.contains(bullet2)) {  
            removeChild(bullet2);
        }
        bLives -= 1;
        bArray2.splice(index, 1);
    }
}

从前面到后面迭代数组并删除元素将缩小数组,在下一次迭代中,您将跳过元素。最好是从后到前迭代,然后删除。

此外,在调用removeChild之前检查DisplayObjectContainer是否包含要删除的元素也是一个好主意。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28016001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档