首先,为清楚起见,我是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()
函数)之后,它再次出现。这似乎是没有常见原因的常见错误。
我知道奇怪的问题,但确实困扰了我。有人遇到过这种情况吗?
答案 0 :(得分:0)
您应该改为这样做:player.bitmap.bitmapData=newBitmapData;
并丢弃addChild
的所有改组。 Bitmap
对象是用于显示BitmapData
的包装,因此可以定向为显示任何位图数据。而且由于显示列表不会以这种方式更改,因此您无需丝毫重新排序(至少是对这组操作的响应)。