【发布时间】:2023-04-10 05:04:01
【问题描述】:
参数错误 #2025:
提供的 DisplayObject 不是调用者的子对象
在我的程序中,我有一个在屏幕上代表敌方单位的显示对象结构,排列如下:
0: "enemy handler" ➔ [object EnemyHandler]
0: "enemy" ➔ [object Enemy1]
0: "enemy's skin"(MovieClip) ➔ [object EnemySkin1]
0: "skin image" ➔ [object Shape]
文档类包含一个EnemyHandler实例,它包含多个Enemy1、Enemy2等实例。每个实例都有一个皮肤电影剪辑已附加。
Enemy 类(Enemy1/2/3 ect 继承自该类)包含一个属性 expired,该属性在 Enemy 类 (enemy.update) 中设置为 true达到了一定的程度。
在敌人处理程序类中有一个函数,也是问题所在,它循环遍历所有敌人显示对象的数组,更新那里的位置,然后,
if(tempEnemy.expired)
{
tempEnemy.destroy(); // removeChild(skin)
enemyList.splice(tempEnemy);
removeChild(tempEnemy)
}
运行时,如果所有敌人都按照创建的顺序到达终点,则没有问题,但是如果一个例如移动得更快,并且先到达终点,则会出现错误#2025(The提供的 DisplayObject 不是调用者的子对象)被抛出。
我已将其范围缩小到程序试图移除敌人两次的事实,原因我无法辨别。它循环并移除所需的敌人,然后尝试再次移除它,即使它是从数组中拼接的(这发生正确,并且第一次尝试 removeChild 总是成功的)
这对我来说可能是相当简单的事情,所以请原谅我,但感谢您提供任何帮助。这是文件;
[框架上的代码] pastebin.com/vcXzQpr9
[敌人.as] pastebin.com/RNXgK8Ex
[EnemyHandler.as] pastebin.com/6fytxbMW
[Enemy0.as] & [Enemy1.as] pastebin.com/5bW3Aa0H
[Utils.as] pastebin.com/PQ2LPV0v
[traceDl.as] {调试显示列表} pastebin.com/9vQGKcYP
【问题讨论】:
标签: actionscript-3 flash removechild displayobject