0

我正在制作一个简单的游戏,并且有一个充满敌人的向量,以便从我的“激光”对象(它是一个空间 shmup)对它们进行命中检查。每个激光都循环穿过 Vector 并检查它是否遮挡了命中圈。问题在于当一个激光摧毁一个敌人时,其余的激光也尝试检查相同的向量,只是因为敌人已经被拼接出来并且它改变了向量的大小而超出了界限。

for each (var enemy:Enemy in enemies){
                var distanceX = this.x - enemy.x;
                var distanceY = this.y - enemy.y;
                var distance = Math.sqrt( (distanceX*distanceX) + (distanceY*distanceY) );

                if (distance <= enemy.hitRadius) {
                    enemy.removeEnemy();
                    enemies.splice(enemies.indexOf(enemy),enemies.indexOf(enemy));
                }
}

我将如何收集要删除的 Vector 中各个元素的索引,然后仅在每个 Laser 对象完成检查后才删除它们?

编辑:这是我的 Enemy 类中的 removeEnemy() 函数,以防万一:

public function removeEnemy(){
            removeEventListener(Event.ENTER_FRAME, move);
            parent.removeChild(this);
            trace("removed Enemy", enemies.indexOf(this));
        }

编辑编辑:在我的 removeEnemy() 函数中,我也收到一个指向“父”的空引用指针错误......但只是有时。我有一种感觉,如果我解决了这两个问题中的一个,另一个也将得到解决,但我不确定。

4

1 回答 1

0

我修好了它!问题实际上在于我如何使用“splice()”方法。原来第二个参数不是停止拼接的结束索引,而是要拼接的元素个数。所以当我试图拼接元素 0 时,我没有拼接任何东西,而当我试图拼接元素 3 时,我也在拼接元素 4 和 5。我觉得自己像个笨蛋,因为没有正确阅读 API 并浪费了一个几个小时。感谢所有发表评论的人——你们帮助我排除了我认为的问题所在。

于 2012-11-02T21:38:49.647 回答