从数组中删除javascript

从数组中删除javascript,javascript,arrays,object,Javascript,Arrays,Object,您好,我的代码运行,但当我与星星发生冲突时,它会擦除屏幕上的所有内容,但我需要它做的只是从屏幕上删除星星,但保留所有其他内容,因为我计划稍后为收集到的每个星星制作记分牌 stars=[]; stars.push({ x: 420, y: 580, width: 5, height: 5 }); function update() { var score = 0; // score starts at 0 // check keys if (keys[38] || ke

您好,我的代码运行,但当我与星星发生冲突时,它会擦除屏幕上的所有内容,但我需要它做的只是从屏幕上删除星星,但保留所有其他内容,因为我计划稍后为收集到的每个星星制作记分牌

stars=[];
 stars.push({
   x: 420,
   y:  580,
width: 5,
height: 5

 });


function update() {

var score = 0; // score starts at 0

// check keys
if (keys[38] || keys[32]) {
    // up arrow or space
    if (!player.jumping && player.grounded) {
        player.jumping = true;
        player.grounded = false;
        player.velY = -player.speed * 2;
    }
}
if (keys[39]) {
    // right arrow
    if (player.velX < player.speed) {
        player.velX++;
    }
}
if (keys[37]) {
    // left arrow
    if (player.velX > -player.speed) {
        player.velX--;
    }
}

player.velX *= friction;
player.velY += gravity;

ctx.clearRect(0, 0, width, height);
ctx.fillStyle = "black";
ctx.beginPath();

player.grounded = false;
for (var i = 0; i < boxes.length; i++) {
    ctx.rect(boxes[i].x, boxes[i].y, boxes[i].width, boxes[i].height);

    var dir = colCheck(player, boxes[i]);



    if (dir === "left" || dir === "right") {
        player.velX = 0;
        player.jumping = false;
    } else if (dir === "bottom") {
        player.grounded = true;
        player.jumping = false;
    } else if (dir === "top") {
        player.velY *= -1;
    }

  }
for (var i = 0; i < stars.length; i++) {
    ctx.rect(stars[i].x, stars[i].y, stars[i].width, stars[i].height);

    var dir = colCheck(player, stars[i]);

    if(dir != null)
    {
delete stars[0];
//stars.splice(a);
//var resultObject = search.splice(0,1);
 }


     if (dir === "left" || dir === "right") {
        player.velX = 0;
        player.jumping = false;
    } else if (dir === "bottom") {
        player.grounded = true;
        player.jumping = false;
    } else if (dir === "top") {
        player.velY *= -1;
    }

}


  if(player.grounded){
     player.velY = 0;
}

player.x += player.velX;
player.y += player.velY;

ctx.fill();
ctx.fillStyle = "blue";
ctx.fillRect(player.x, player.y, player.width, player.height);

  requestAnimationFrame(update);
   }
stars=[];
推({
x:420,
y:580,
宽度:5,
身高:5
});
函数更新(){
var score=0;//分数从0开始
//检查钥匙
如果(键[38]| |键[32]){
//向上箭头或空格
如果(!player.jumping&&player.grounded){
player.jumping=true;
player.grounded=false;
player.velY=-player.speed*2;
}
}
如果(键[39]){
//右箭头
如果(player.velX-player.speed){
player.velX--;
}
}
player.velX*=摩擦力;
player.velY+=重力;
ctx.clearRect(0,0,宽度,高度);
ctx.fillStyle=“黑色”;
ctx.beginPath();
player.grounded=false;
对于(变量i=0;i
更换

delete stars[0];


我没有发现任何其他错误。

您需要向后遍历数组。这是因为当您删除元素时,数组的长度将发生变化(最后的元素索引将减少一个),因此当前代码将跳过一些元素。此外,正如deme72所说,您需要使用从数组中删除项目。请参阅下面的更新代码:

for (var i = stars.length - 1; i >= 0; i--) {
    // Other code
    stars.splice(i, 1);
}

我算出了它的星星。拼接(i,1);:过去两个小时我一直在为这个问题烦恼,但我犯了一个简单的错误:如果你不想像冥王星说的那样改变环的方向,就加上我--;在拼接后,我将其编辑为显示,只需确保
i--
仅显示在删除元素的位置。否则,您将有一个无限循环。
for (var i = stars.length - 1; i >= 0; i--) {
    // Other code
    stars.splice(i, 1);
}