首页 > 解决方案 > Actionscript 3 - 更改索引时阶段不识别添加的孩子

问题描述

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

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

(此代码已针对此过程的基本必需品进行了细化以避免混淆)

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()函数)进行调试后,它又出现了。这似乎是一个没有常见原因的常见错误。

奇怪的问题,我知道,但真的困扰着我。有没有人经历过这样的事情?

标签: actionscript-3

解决方案


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


推荐阅读