-3

我无法让我的 var 计数来跟踪 if 语句中的计数有人可以帮助我吗

 Laser.prototype.update = function () {
    //.3
    this.rot += .3
    this.pos.add(this.dir.clone().mult(5));
    this.alive = !(this.pos.x > cw || this.pos.x < 0 || this.pos.y > ch || this.pos.y < 0);
    var counts = 0;
    for (var i = 0; i < asteroids.length; i++) {
        var astPos = asteroids[i].pos.clone();
        astPos.sub(this.pos); //3 impact area
        if (asteroids[i].onscreen && astPos.len() < asteroids[i].sizes[asteroids[i].level] + 10) {
            asteroids[i].hit(this.dir);
            if (counts < 5) {
                this.alive = false;
                counts++;
                //alert("the count is" + counts);
            }
            if (counts > 5) {
                this.alive = true;
                counts++;
                alert("the count is" + counts);
            }
            return counts;
        }
    }
}
4

1 回答 1

3

可能是您没有考虑 counts == 5 时的情况,因此当计数达到 5 时它不会执行 counts++ ATALL。您可以将 if 条件的代码更改为

 if (counts<5){

            this.alive = false;
            counts++;
            //alert("the count is" + counts);
 }
 else{

             this.alive = true;
             counts++;
              alert("the count is" + counts);

 }

或类似的东西...考虑计数== 5时的情况。

编辑:还将 return 语句放在 for 循环之外。那就试试

EDIT2:还将 if 语句更改为

if (asteroids[i].onscreen && (astPos.len() < (asteroids[i].sizes[asteroids[i].level] + 10))) {

使其具有更好的可读性

EDIT3:考虑到下面的评论,您可以尝试两件事。

  1. 将 return 语句放在 for 循环之外。像这样

    如果(计数> 5){
                        this.alive = true;
                        计数++;
                        alert("计数是" + counts);
                    }
                }
            }
           返回计数;
        }

  2. 或者,您可以将“计数”声明为全局变量,并在函数中增加“计数”,就像您在注释中所做的那样。并返回它。在这种情况下,for 循环将没有多大意义。你也可以删除它。试试这个,让我们知道。

于 2013-03-08T04:11:05.260 回答