【问题标题】:Actionscript 3 remove child at pointActionscript 3 删除子点
【发布时间】:2010-12-14 20:52:31
【问题描述】:

嗨,我是 AS3 的新手,我想知道在某个时间点移除孩子的最佳方法是什么。 我试过了

Holder.removeChild(Holder.getObjectsUnderPoint(new Point(exampleX, exampleY))[0]);

但是返回的 ArgumentError: 错误 #2025: 提供的 DisplayObject 必须是调用者的子对象。

有什么建议吗?

【问题讨论】:

    标签: actionscript-3 removechild displayobject


    【解决方案1】:

    getObjectsUnderPoint() 方法将返回一个 DisplayObjects 数组,它们不一定是您的 Holder 对象的直接子代,它们可能是孙子或孙子等...

    你可以这样设置条件:

    var objects:Array =  Holder.getObjectsUnderPoint( yourPoint );
    for each( var child:DisplayObject in objects )
    {
        if( child.parent == Holder )
           Holder.removeChild( child ) ;
    }
    

    Holder.contains 不会过滤任何内容,因为它也会返回 grandChildren...我的错误!

    【讨论】:

    • 好的,试过了。它通过 Holder.contains() 但是当它尝试删除它时仍然会抛出相同的错误。奇怪吧
    • 刚刚意识到我遗漏了一个括号 :( 您是按原样尝试代码还是修改了它?
    • 是的,我选择并添加了它。我决定检查对象数组中对象的父对象,它给了我对象的类型而不是持有者:S。无论如何,我最终使用了 mattias 丑陋的代码解决方案
    • 有时候做个丑人真好。很高兴知道为什么 Holder.contains(child) 有效,但 Holder.removeChild(child) 无效。
    • 我实际上设法让您的解决方案正常工作,除非只有 if(child.parent.parent == Holder) { holder.removeChild(child.parent);} 我想就像你说的那样一个孙子:P ...不知道这是怎么回事。无论如何感谢您的帮助!
    【解决方案2】:

    我不知道为什么 Patricks 版本不起作用。这是使用剪辑父级的替代(丑陋代码)解决方案。

    var clips : Array =  _container.getObjectsUnderPoint(_point);
    
    for each(var clip : DisplayObject in clips)
    {
        clip.parent.removeChild(clip);
    }
    

    【讨论】:

      猜你喜欢
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      • 1970-01-01
      相关资源
      最近更新 更多