敵機移動
戦闘機と敵機の衝突判定を行います。判定箇所は敵機が移動した時、戦闘機が移動した時です。まずは敵機が移動した時のプログラムを見ていきます。
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
/* 敵機描画 */ function tekiMove(){ teki_count++; if(teki_count>TEKI_INTER){//出撃間隔に達した? fight(); teki_count = 0; } for(var i=0;i<te.length;i++){//出撃中の敵機を探す if(te[i][0] == TEKI_FIGHT){ ctx.drawImage(teki,te[i][2],te[i][3],teki_x_size,teki_y_size); tmp_x = te[i][2]; //横座標保管 tmp_y = te[i][3]; //縦座標保管 tmp_houkou=-1; //衝突時方向変数 switch(te[i][1]){ case H_LEFT: //左方向へ進む te[i][2] = te[i][2] - te[i][4]/2; te[i][3] = te[i][3] + te[i][4]/2; tmp_houkou = H__RIGHT;//衝突時方向設定 break; case H_CENTER://真ん中方向へ進む te[i][3] = te[i][3] + te[i][4]; tmp_houkou = H_CENTER;//衝突時方向設定 break; case H__RIGHT://右方向へ進む te[i][2] = te[i][2] + te[i][4]/2; te[i][3] = te[i][3] + te[i][4]/2; tmp_houkou = H_LEFT;//衝突時方向設定 break; } if(colliTekivsTeki(i)){ //衝突しているか? te[i][2] = tmp_x; //横座標を戻す te[i][3] = tmp_y; //縦座標を戻す te[i][1] = tmp_houkou;//衝突時方向に設定 } //戦闘機と衝突しているか if(collision(te[i][2],te[i][3],teki_x_size,teki_y_size, my_x,canvas.height-my_y_size-10,my_x_size,my_y_size)){ te[i][0] = TEKI_ON; final(); } if( te[i][3] > canvas.height){//下画面はみ出し? te[i][0] = TEKI_ON; } if( te[i][2] < 0){ //左画面はみ出し? te[i][2] = 0; te[i][1] = H__RIGHT; } if( te[i][2] > canvas.width - teki_x_size){//右画面はみ出し? te[i][2] = canvas.width - teki_x_size; te[i][1] = H_LEFT; } } } } |
敵機と戦闘機が衝突した場合はゲーム終了となります。42行目で終了処理final()を呼び出しています。現段階の終了処理は「終了」と表示しているだけです。
1 2 3 4 5 6 |
/* 終了処理 */ function final(){ console.log("終了"); } |
戦闘機移動
戦闘機移動後に判定処理を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/* 自機描画 */ function myMove(){ ctx.drawImage(my,my_x,canvas.height-my_y_size-10,my_x_size,my_y_size); my_x = my_x + my_houkou; if( my_x > canvas.width - my_x_size){ my_x = canvas.width - my_x_size } if( my_x < 1 ){ my_x = 1; } //敵機と衝突しているか if(colliTeki(my_x,canvas.height-my_y_size-10,my_x_size,my_y_size)){ final(); } } |
実行
動作を確認します。敵機が戦闘機と衝突するまで辛抱強く待ってください。実行画面へ
ここまでのソースコードを掲載します。