AS3-错误#2025:提供的DisplayObject必须是调用方的子级 [英] AS3 - Error #2025: The supplied DisplayObject must be a child of the caller

查看:61
本文介绍了AS3-错误#2025:提供的DisplayObject必须是调用方的子级的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

经过2天的尝试并寻找答案后,我仍然没有找到答案.我不断收到错误#2025:提供的DisplayObject必须是调用方的子级.我正在做一个游戏,如果用户击中敌人,敌人就会被摧毁.代码:

After 2 days of trying and searching for an answer I still didn't found it. I keep getting Error #2025: The supplied DisplayObject must be a child of the caller. I'm making a game where if the user hits an enemy, the enemy get destroyed. The code:

我的主班

package classes
{   
import flash.display.MovieClip;
import flash.events.Event;
import flash.utils.Timer;

public class Main extends MovieClip
{
    var enemyTimer:Timer;

    public function Main() 
    {
        var user:ship = new ship();
        addChild(user);
        user.name = "user";
        user.initialize();

        enemyTimer = new Timer(2000);
        enemyTimer.addEventListener("timer", sendEnemy);
        enemyTimer.start();

        function sendEnemy(e:Event)
        {
            var badboy:enemy = new enemy();
            addChild(badboy);
            badboy.initialize();
        }
    }
}
}

敌军阶层

package classes.enemy
{   
import flash.display.MovieClip;
import flash.events.Event;

public class Enemy extends MovieClip
{
    var speed:Number;

    public function initialize()
    {
        addEventListener("enterFrame", enterFrame);
    }

    public function Enemy() 
    {
        this.x = 700;
        this.y = Math.random()*200 + 50;
        speed = Math.random()*5 + 5;
    }

    function enterFrame(e:Event)
    {
        this.x -= speed;

        if(this.hitTestObject(parent.getChildByName("user")))
        {
            kill();
        }
    }

    function kill()
    {
        removeEventListener("enterFrame", enterFrame);
        stage.removeChild(this);
    }
}
}

文件位于不同的文件夹中(类> Main.as& classes.enemy.Enemy.as),不知道是否与此有关.

The files are in different folders (classes > Main.as & classes.enemy.Enemy.as), don't know if that has anything to do with it.

任何帮助将不胜感激.

推荐答案

这可能是因为您尝试从 stage 移除Enemy MovieClip,而它不是(直接)子级.

That's probably because you try to remove the Enemy MovieClip from stage, that it is not a (direct) child of.

我建议您更改此设置:

stage.removeChild(this);

对此:

this.parent.removeChild(this);

当您引用DisplayObject(在这种情况下为 this )时,即使您不知道该父对象是什么,也可以始终将其从其父对象中删除.或者更确切地说,如果您知道它在显示列表中,则可以将其删除,因此您还可以通过执行以下操作首先检查它是否正确:

When you have a reference to a DisplayObject, like this in this case, you can always remove it from its parent, even if you don't know what that parent is. Or rather, you can remove it if you know it is on the display list, so you could also first check that it is, by doing:

if(this.parent) {
    this.parent.removeChild(this);
}

这篇关于AS3-错误#2025:提供的DisplayObject必须是调用方的子级的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆