动作3-阶段在更改索引时无法识别添加的子项

时间:2018-08-02 07:30:29

标签: actionscript-3

首先,为清楚起见,我是ActionScript 3的六个月新手。

在小型游戏的当前项目下,玩家子画面的位图每帧都更改为所需的任何图像。在相同的过程中,将更新此精灵(作为阶段的子级)的索引,以确保其保持在所有其他图像的顶部。

(此代码已精简为该过程的基本必需品,以避免造成混淆)

function playerFrame (newBitmap):void {
  player.removeChild(prevBitmap);
  player.addChild(newBitmap);
  prevBitmap = newBitmap;
  stage.setChildIndex(player, stage.numChildren - 1); //<-- targeted line
}
function tick (event:Event):void {
  playerFrame(bitmap) //<-- whatever the player bitmap needs to be changed to
}
stage.addEventListener(Event.ENTER_FRAME, tick);

我已经离开了这个项目一个星期,当我返回时-在未对程序进行任何更改之后-此目标行出现了一个神秘的错误:

ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.

(不是玩家,不是舞台上的孩子)

奥秘不是错误本身,而是错误的原因:在程序中,player精灵是作为子级添加到舞台的,并且再也不会碰到。

在(通过代码或在线方式)找不到该错误的解决方案之后,我将该程序恢复到以前的保存状态,事实证明不会产生相同的问题。但是,稍后,在添加了用于调试的跟踪器(trace()函数)之后,它再次出现。这似乎是没有常见原因的常见错误。

我知道奇怪的问题,但确实困扰了我。有人遇到过这种情况吗?

1 个答案:

答案 0 :(得分:0)

您应该改为这样做:player.bitmap.bitmapData=newBitmapData;并丢弃addChild的所有改组。 Bitmap对象是用于显示BitmapData的包装,因此可以定向为显示任何位图数据。而且由于显示列表不会以这种方式更改,因此您无需丝毫重新排序(至少是对这组操作的响应)。