Actionscript 3 - 更改索引时无法识别的阶段已添加 child

Actionscript 3 - Stage not recognising added child when changing index

首先,为了清楚起见,我才刚接触 ActionScript 3 6 个月。

在一个小游戏的当前项目中,玩家精灵的位图每帧都更改为所需的任何图像。在同一过程中,此精灵(作为舞台的 child)索引会更新,以确保它保持在所有其他图像的顶部。

(此代码精炼到此过程的基本必需品以避免混淆)

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.

(作为玩家而不是舞台的 child)

谜团不是错误本身,而是错误的原因:在程序中,player 精灵作为 child 添加到舞台上,并且再也没有被碰过。

在找不到此错误的解决方案(无论是在代码中还是在线)后,我将程序恢复到之前的保存状态,证明不会产生同样的问题。不过后来加了tracer(trace()函数)调试后,又出现了。貌似是一个没有常见原因的常见错误。

奇怪的问题,我知道,但真的很烦我。有没有人遇到过这种情况?

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