AS3:将一个对象放在每一帧的前面

AS3: bringing an object to front each frame

我有一个 UI 对象,当然应该始终将其放在所有其他对象的前面。为此,我决定在每一帧中销毁并再次添加它,如下所示:

removeChild(UI_Indicator)
addChild(UI_Indicator)

但是,尽管如此,在其区域中创建的对象仍然位于其之上。这怎么可能?我也尝试了常见的

UI_Indicator.parent.setChildIndex(UI_Indicator,UI_Indicator.parent.numChildren - 1)

但是也行不通。有什么建议吗?

你没有用 removeChild() 破坏任何东西,你只是停止显示它。 removeChild() 在这里甚至不是必需的。 addChild() 愉快地接受了一个 DisplayObject,它已经是你调用它的 DisplayObjectContainer 的 child,并且 re-adds 又是 child(到顶部)

  1. 不要在每一帧都重新addChild(),而是将你的 allways-on-top DisplayObject 显示列表一次,然后创建 a DisplayObjectContainer,例如说 a Sprite 并添加它 在你的指标后面。现在将所有其他 DisplayObjects 添加到 那个容器。这样做的缺点是需要您添加 一切都到容器。一旦你的功能中断 不小心 addChild() 常规方式。这个思考过程 导致下面的第二个解决方案。
  2. 在您 DisplayObjectContainer 的子类中,其中包括 指标,覆盖与显示列表交互的方法 (add/remove children等)所有可能导致某些事情的人 掌握指标。这使您可以完全控制 将某些东西添加到此容器时发生了什么。你可以 为了简单起见,要么合并解决方案 1:委托所有 方法调用内部容器 Sprite 或者,如果你不喜欢 有一个内部容器,没有它并确保 除了您的指标之外,没有其他 child 被指定为最高 指数。您将创建一个额外的方法来添加 always-on-top child,例如 addTopChild()