javascript - ActionScript 3 - ArgumentError : Error #2025: The supplied DisplayObject must be a child of the caller

标签 javascript actionscript-3 flash actionscript flash-cs6

我正在学习 http://markbennison.com/actionscript/as3-space-shooter/2-coding-projectiles/ 上的 Action Script 3 教程

我在第 2 部分 Coding projectiles 我不知道为什么当我按下播放时它总是说错误

“ArgumentError:错误 #2025:提供的 DisplayObject 必须是调用者的子对象。”

这是我尝试在按下空格键时发射子弹的确切代码,还有更多代码,但我不知道如何修复参数错误。


函数 addBullet(startX, startY): void {

//declare an object instance from the bullet Class
var b: Bullet = new Bullet();

//set the new bullet's x-y coordinates
b.x = startX;
b.y = startY;

//add the new bullet to the stage
stage.addChild(b);

//store the object in an array
bullets_arr.push(b);

函数 moveBullet(): void {

//loop through all instances of the bullet

//loop from '0' to 'number_of_bullets'
for (var i: int = 0; i < bullets_arr.length; i++) {
    //move the bullet
    bullets_arr[i].x += bulletSpeed;

    //if the bullet flies off the screen, remove it
    if (bullets_arr[i].x > stage.stageWidth) {
        //remove the bullet from the stage
        stage.removeChild(bullets_arr[i]);

        //remove the bullet from the array
        bullets_arr.removeAt(i);
    }
}


有人可以给我提示以改变任何东西吗?

最佳答案

错误意味着当这条线运行时:

stage.removeChild(bullets_arr[i]);

bullets_arr[i] 引用的项目实际上不在舞台上。可能是因为它已从舞台上移除。

虽然这可能不是导致错误的确切原因,但这里的一个大问题是从您当前正在迭代的数组中删除项目。

当您执行:bullets_arr.removeAt(i); 时,您正在更改 bullets_arr 数组的大小。

在第一次迭代中,i0。第一个项目符号是 bullets_arr[0],第二个项目符号是 bullets_arr[1],第三个项目符号是 bullets_arr[2] 等等。如果在第一个循环,你最终从数组中删除了项目,这意味着索引已经移动,所以现在你的第二个项目符号是 bullets_arr[0],但在下一个循环中 i 递增到 1,所以现在您实际上已经跳过了第二个项目符号并正在检查第三个项目,在删除第一个项目符号之后,它现在位于索引 1 处。

在您的 moveBullet 函数中,更改循环使其向后迭代,这样如果您删除一个项目,它不会移动您尚未迭代的索引。

for (var i: int = bullets_arr.length - 1; i >= 0; i--) {

关于javascript - ActionScript 3 - ArgumentError : Error #2025: The supplied DisplayObject must be a child of the caller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51097252/

相关文章:

actionscript-3 - AS3 类扩展 Sprite

actionscript-3 - flash as3 - 我需要在 byteArray 数据中进行二进制搜索

javascript - 在 Flash 上强制负底边距

javascript - 如果页面内容的高度小于页面高度,则不会触发 ioninfinite 事件

javascript - 从 $.when .done 之外的 ajax 添加对象

JavaScript 和分割数组

ios - actionscript3 中的共享对象问题

actionscript-3 - Flash/Flash Builder 中的图像限制?

Flash:正确处理浏览器外的点击和拖动?

javascript - 事件处理程序被调用两次(javascript)