0

因此,在可汗学院上编写游戏时,当我尝试从数组中删除子弹时,我遇到了错误“对象不支持方法拼接”,我已经检查了我的代码几个小时,但没有发现它为什么不起作用。想法?

编辑:用于删除项目符号的代码是bullets[i].splice(i,1);,这就是我的代码出错的原因。

MVCE:

var bullets = [];

var bullet= function(x,y,blah)
{
    //code that is not important here
};

bullets.push(bullet(0,0,30));
for(var I = 0; I < bullets.length; I++){
if(bulletRemove){
bullets[I].splice(i,1)
}
}
4

1 回答 1

2

你有一个名为的变量bullets

var bullets = [];

(旁注:为什么在这条线之前有一个随机的花括号?)

这个bullets变量是一个数组。它包含Bullet类的实例:

bullets.push(new Bullet(x, y, 10, player.x+bSize/2, player.y+bSize/2));

您可以使用数组来访问Bullet特定索引处的 a,然后您可以Bullet在该实例上调用该类的函数:

bullets[i].move();

您还可以splice()在数组本身上调用该函数:

bullets.splice(i,1);

但是,您不能splice()在特定Bullet实例上调用该函数!

bullets[i].splice(i,1);

这一行Bullet从数组的i索引中获取一个实例bullets,然后尝试从类中调用splice()函数。Bullet但是Bullet该类没有splice()功能!这就是导致错误的原因。

相反,您可能打算在数组本身上调用它:

bullets.splice(i,1);

将来,在发布问题之前尝试缩小您的问题范围。尝试发布MCVE而不是整个项目。您可以编写一个示例程序,该程序仅使用几行代码来创建一个硬编码数组并用它来演示您的问题。您可能会在创建 MCVE 的过程中自己发现问题!

于 2016-06-20T15:36:41.700 回答