2017-01-20 7 views
0

私はJavaScriptのゲームを作っています。弾丸で打たれたときに敵を死ぬことはできません。ここで私はただ理解できないコードの一部です:弾丸で殴ったときに敵を死にさせる

for(var i=0;i<enemies.length;i++){ 
    ctx.fillRect(enemies[i].x,enemies[i].y,30,100); 

    if(player.x+player.width>enemies[i].x && player.x<enemies[i].x+30 && player.y+player.height>enemies[i].y && player.y<enemies[i].y+100){ 
     document.location.reload(); 
    } 


} 

for (var b=0;b<bullets.length;b++){ 
    ctx.beginPath(); 
    ctx.arc(bullets[b].x,bullets[b].y,2,0,Math.PI*2); 
    ctx.fill();  
    bullets[b].x += bullets[b].dx; 

    if(bullets[b].x>enemies[i].x && bullets[b].x<enemies[i].x+enemies[i].width && bullets[b].y>enemies[i].y && bullets[b].y<enemies[i].y+enemies[i].height){ 
     enemies.splice(i,1); 
    } 

} 

ので、私はこの問題は、それがプロパティの「x」の敵の[i]を、私はdidnのため」を読み取ることができないということであることを知っていますループのためにそれを敵に入れてはいけませんが、それを置くと、弾丸[b]のプロパティ "x"を読むことができません。私はこれで2日間これに執着し、見つけられたすべてのものを検索しましたが、役に立たないものは何も見つかりませんでした。私は助けていただければ幸いです... 事前に感謝!

+1

ここに入れ子にしたループが必要です –

+0

そうですが、私はそれを試みましたが、敵が消えると弾丸がそれ以上発射されません... – Vuxer

+0

@Vuxer Then * that *あなたの本当の問題です。すべての敵に対してすべての弾丸をチェックする必要があります(衝突検出のためのより良いデータ構造とアルゴリズムがなければ)、入れ子にされたforループがそれを行う方法です。 – chepner

答えて

1

あなたがしたいのは、各弾丸のすべての敵をチェックすることです。

これはネストされたループ使用して行われます:ときスプライシングennemyを見逃さないようにするために、逆の順序で敵の上に、この例のIループで:

for (var b=0;b<bullets.length;b++){ 
    ctx.beginPath(); 
    ctx.arc(bullets[b].x,bullets[b].y,2,0,Math.PI*2); 
    ctx.fill();  
    bullets[b].x += bullets[b].dx; 
    for (var j=ennemies.length; j-- >0;) { 
     if(bullets[b].x>enemies[j].x && bullets[b].x<enemies[j].x+enemies[j].width && bullets[b].y>enemies[j].y && bullets[b].y<enemies[j].y+enemies[j].height){ 
      enemies.splice(j,1); 
     } 
    } 
} 

注意を。

+0

ありがとうございます。でも、これを試してみると、銃弾を撃っている間だけ敵を見ることができます。 – Vuxer

+0

@Vuxerこれはまったく別の問題です。ところで、データを更新する機能(衝突のチェックを含む)とデータを描画する関数(図面)を分離するときに、通常、そのようなコードを管理する方が簡単です –

+0

もう一度ありがとうございます。 – Vuxer

関連する問題