3

ここにはすべてのフィドルがあります - http://jsfiddle.net/Ey2eK/1/

しかし、問題の部分はこれらの機能だと思います。これは、メインのゲーム ループの最後に読み込まれます。

 playerBullets.forEach(function() {
            if (this.x > WIDTH || this.x < 0 || this.y > HEIGHT || this.y < 0) { this.active = false;}
            playerBullets = playerBullets.filter(function(bullet) {
            return this.active;});

            bulletUpdate(this);
            bulletDraw(this);
          }); 

OK、ここでやろうとしていることは、弾丸ごとに playerBullets 配列を循環することです。まず、範囲外かどうかを確認し、範囲外の場合は弾丸を削除します。次に、bulletUpdate をロードして弾丸の位置を更新します。この式:

bulletUpdate = function() {
    this.x += this.xVelocity;
    this.y += this.yVelocity;
  }; 

ここで意図しているのは、配列内の弾丸ごとに、x 位置と y 位置が速度変数によって増加することです。

次に、弾丸の新しい位置を計算したら、bulletDraw で描画します。

bulletDraw = function() {
    c.beginPath();
    c.save();
    c.translate(this.x,this.y);
    if (deltaX < 0) {
    c.rotate(this.angle);
    }
    else {
    c.rotate(this.angle);
    c.scale(-1,1);
    }
    c.translate(-this.x,-this.y);
    c.fillStyle = "#000000";
    c.rect(this.x, this.y, 2, 2);
    c.fill();
    c.restore();
    c.closePath();
  }; 

基本的に、新しい this.x と this.y に小さな点を描画します。

ただし、実際には、クリックするたびに、プレーヤーが現在いる場所から弾丸が再描画されるようです。説明するのは難しいですが、Fiddle をチェックしてください - http://jsfiddle.net/Ey2eK/1/ で、ゲーム エリアを数回クリックしてください。後で取り組みます)。

私が望んでいるのは、弾丸が通常の弾丸と同じように旅を続けて、最終的にゾンビを殺すことができるようにすることです.

ご協力いただきありがとうございます。私はこれで真剣に立ち往生しています。

4

1 に答える 1

3

JSFiddle

Bullet主な問題は、クリック時に新しいオブジェクトをインスタンス化していないことです。Bullet 関数の値を何度も再定義しているだけです。

createBullet()次のようになります。

function createBullet() {
  var bullet = new Bullet();
  playerBullets.push(bullet);
}

ただし、各弾丸のインスタンスが多数あるため、実際には描画/更新関数を bulletDraw/bulletUpdate に置き換えて、forEach 呼び出し内でそれらを呼び出すことができます。

function Bullet() {
    ....
    this.bulletUpdate = function() { ... }
    this.bulletDraw = function() { ... }
}

// bullet refers to the current bullet that you're iterating over.
playerBullets.forEach(function(bullet) {
    if (bullet.x > WIDTH || bullet.x < 0 || bullet.y > HEIGHT || bullet.y < 0) { 
        bullet.active = false;
    }
    playerBullets = playerBullets.filter(function(bullet) {
        return bullet.active;
    });

    bullet.bulletUpdate();
    bullet.bulletDraw();
});
于 2013-09-14T04:22:26.163 に答える