衝突判定
弾丸情報の座標、横幅、縦幅を引数とし全敵機との衝突判定を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* 敵機との衝突判定 引数: x・・・横座標、y・・・縦座標 lx・・・横幅、ly・・・縦幅 */ function colliTeki(x,y,lx,ly){ for(var i=0;i<te.length;i++){//出撃中の敵機を探す if(te[i][0]==TEKI_FIGHT){ if(collision(te[i][2],te[i][3],teki_x_size,teki_y_size, x,y,lx,ly)){ te[i][0] = TEKI_ON; //敵を待機中に変更 return true; } } } return false; } |
弾丸と衝突した敵機は状態を「待機中」にし表示を中止します。
弾丸描画
弾丸描画後に弾丸を進めます。そのタイミングで敵機と衝突していないか判定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
/* 弾丸描画 */ function bulletMove(){ if(bullet_flg==true){ //スペースキーが押されているか bullet_count++; if(bullet_count > BULLET_INTER){ //発射間隔を過ぎているか shot(my_x+my_x_size/2,canvas.height-my_y_size-10);//発射 bullet_count = 0; } } for(var i=0;i<bullet.length;i++){ //発射されている全弾丸を描画 if(bullet[i][0] == BULLET_SHOT ){ ctx.fillStyle = "yellow"; ctx.lineWidth = 1; ctx.fillRect(bullet[i][1]-BULLET_WIDTH/2,bullet[i][2]-BULLET_HEIGHT,BULLET_WIDTH,BULLET_HEIGHT); bullet[i][2] = bullet[i][2] - BULLET_SPEED; //弾丸を進める if(bullet[i][2]<0){ //弾丸が一番上に達したか bullet[i][0] = BULLET_OFF; //弾丸終了 } if(colliTeki(bullet[i][1],bullet[i][2],//敵機撃破? BULLET_WIDTH,BULLET_HEIGHT)){ bullet[i][0] = BULLET_OFF; //弾丸終了 } } } } |
敵機と衝突している場合は弾丸を終了状態にします。
実行
動作を確認します。スペースキーで敵機を打ちまくってください。実行画面へ
撃墜後の描画が無く地味ですが、この辺の飾りつけは後で行っていきます。