Actionscript 3 使用AS3,我可以获取一个子对象的所有引用,并在从显示列表中删除该子对象的同时将其置零吗?

Actionscript 3 使用AS3,我可以获取一个子对象的所有引用,并在从显示列表中删除该子对象的同时将其置零吗?,actionscript-3,Actionscript 3,我面临着清除记忆的问题。我正在做一个游戏,在舞台上有很多坦克,每个坦克里面都有一个变量,叫做敌人敌方是对敌方坦克的引用,我通过一个函数指定了它。我的问题是,当一辆坦克(在舞台上)从显示列表中移除时,其敌人被设置为参照该坦克的其他坦克仍然像它在那里一样工作。我知道解决方案,但我不知道在这种情况下如何实现它。我必须将移除的油箱的所有引用都置空,但问题是我不知道其他油箱中有哪些油箱作为引用,哪些没有 所以,我在想,当我想拆除一个坦克时: 获取所有对它的引用 全部为空 拆下油箱 我怎样才能得到所有的参考

我面临着清除记忆的问题。我正在做一个游戏,在舞台上有很多坦克,每个坦克里面都有一个变量,叫做敌人敌方是对敌方坦克的引用,我通过一个函数指定了它。我的问题是,当一辆坦克(在舞台上)从显示列表中移除时,其敌人被设置为参照该坦克的其他坦克仍然像它在那里一样工作。我知道解决方案,但我不知道在这种情况下如何实现它。我必须将移除的油箱的所有引用都置空,但问题是我不知道其他油箱中有哪些油箱作为引用,哪些没有

所以,我在想,当我想拆除一个坦克时:

  • 获取所有对它的引用
  • 全部为空
  • 拆下油箱
  • 我怎样才能得到所有的参考资料,只知道我要移除的油箱? 提前谢谢。这是我第一次参加这样的活动

    我已经想到了这个代码,但是还有其他更有效的方法吗

    所有储罐都有相同的父储罐,因此在每个储罐内,输入帧侦听器函数:

    if (enemy!=null&&parent.contains(enemy)==false){
       enemy=null;
    }
    

    您可以尝试使用事件侦听器。大概是这样的:

    // Assuming Tank extends DisplayObject
    public function setEnemy(newEnemy:Tank):void
    {
        if (this.enemy)
        {
            this.enemy.removeEventListener(Event.REMOVED_FROM_STAGE, onEnemyRemoved); 
        }
        this.enemy = newEnemy;
        this.enemy.addEventListener(Event.REMOVED_FROM_STAGE, onEnemyRemoved); 
    }
    
    private function onEnemyRemoved(e:Event):void
    {
        this.enemy.removeEventListener(Event.REMOVED_FROM_STAGE, onEnemyRemoved);
        this.enemy = null;
    }
    

    所有对象都是作为指针传递的,对象不知道什么有指向它的指针,您无法派生此信息。您最好以某种方式标记对象(创建
    isDead
    属性)并编写函数/类,以便在遇到
    isDead==true
    时可以删除引用。或者只使用一个
    阵列
    进行存储,那么您只有一个位置可以将其从中删除这是最好的解决方案我创建的每件事我都从阵列中调用它,不需要时我将其从该阵列中删除。。非常感谢:DSo,如果tank1被tank2和tank3发现,那么在tank2和tank3中有两个tank1的引用,还有两个事件侦听器等待将tank1从阶段中删除,因此当发生这种情况时,这两个事件侦听器会将tank2和tank3引用设置为null。。。使用听众是一个很好的主意,非常感谢。。。