2017-12-12 14 views
0

私は古いGalagaゲームを思い起こさせるトップダウンシューティングゲームを作ろうとしています。 私は、プレイヤーと敵の砲弾との衝突と、敵の宇宙船との衝突をチェックしようとするときとは別に、敵と投射物を動かして、うまく動くようにしました。javascriptの衝突検出に関するアドバイス

弾丸と敵の両方がコンストラクタを使用して作成され、それらを追跡するために配列に配置されます。

//due to the number of enemies on screen they'll be held in an array 
var enemies = []; 
    for(e = 0; e < enemies; e++) { 
     enemies[e] = []; 
     enemies[e] = {x:0,y:0}; 
} 

//class constructor to create enemies 
class enemy { 
    constructor(x,y) { 
     this.enemyX = x; 
     this.enemyY = y; 
     this.enemyWidth = 32; 
     this.enemyHeight = 32; 
    } 
} 

//variable array for the bullets 
var playerBullets = []; 
    for(i = 0; i < playerBullets; i++) { 
    playerBullets[i] = { x: 0, y: 0 }; 
} 

//class constructor to create the bullets 
class bullet { 
    constructor(x,y){ 
     this.bulletX = x; 
     this.bulletY = y; 
     this.bulletWidth = 5; 
     this.bulletHeight = 5; 
    } 
} 

私は国境をオーバーラップするための第1弾の配列を通過し、衝突検出機能と、その後の敵とチェックの配列を作るために、衝突が発見されたときに警告を与えることを試みているが、私は」それに問題があります。もし誰かが助けることができれば、私はそれを高く評価します。

//code for detecting collisions from the bullets 
function collisionDetection() { 
    for(i = 0; i < playerBullets.length; i++) { 
     for(e = 0; e < enemies.length; e++) { 
      if (playerBullets[i].x < enemies.x + enemy.width && 
playerBullets[i].x + bullet.width > enemies.x && 
      playerBullets[i].y < enemies.y + enemy.height && 
playerBullets[i].y + bullet.height > enemies.y){ 
       alert("HIT"); 
      } 
     } 
    } 
} 
+0

https://codereview.stackexchange.comを/ – Peter

+0

@Peterコードが動作状態にあるときにコードを投稿することができます。しかしそれまでは、OPは "_私はそれに問題がありました。"と打ち明けたので、[トピック外](https://codereview.stackexchange.com/help/on-topic)になります。 –

+0

残念ですが、弾丸と敵がともに円形の場合、Pythagorean定理で中点距離を計算するだけです.Cが小さい場合は2つの円の無線が命中します。 – Peter

答えて

0

あなたは敵のインデックス逃した:enemies[e]と敵enemyXenemyYenemyWidthenemyHeight性を有し、bulletsがあります:bulletXを、bulletYbulletWidthbulletHeight

function collisionDetection() { 
    for(i = 0; i < playerBullets.length; i++) { 
     for(e = 0; e < enemies.length; e++) { 
      if (playerBullets[i].bulletX < enemies[e].enemyX + enemies[e].enemyWidth && 
playerBullets[i].bulletX + playerBullets[i].bulletWidth > enemies[e].enemyX && 
      playerBullets[i].bulletY < enemies[e].enemyY + enemies[e].enemyHeight && 
playerBullets[i].bulletY + playerBullets[i].bulletHeight > enemies[e].enemyY){ 
       alert("HIT"); 
      } 
     } 
    } 
}