-3

ifステートメントのカウントを追跡するためにvarカウントを取得できません。誰か助けてください

 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の場合は考慮しなかった可能性があります。したがって、countが5に達すると、counts++をまったく実行しません。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:以下のコメントを考慮して、あなたが試すことができる2つのことがあります。

  1. returnステートメントをforループの外側に配置します。このような

    if(counts> 5){
                        this.alive = true;
                        counts ++;
                        alert("カウントは"+カウント);
                    }
                }
            }
           リターンカウント;
        }

  2. または、「カウント」をグローバル変数として宣言し、コメントにあるように関数の「カウント」をインクリメントすることもできます。そしてそれを返します。この場合、forループはあまり意味がありません。その後、削除した方がよいでしょう。これを試して、私たちに知らせてください。

于 2013-03-08T04:11:05.260 に答える