1. 程式人生 > >[知了堂學習筆記]_JS小遊戲之打飛機(3)-飛機之間的互相撞擊,boss的出現,以及控制boss死亡

[知了堂學習筆記]_JS小遊戲之打飛機(3)-飛機之間的互相撞擊,boss的出現,以及控制boss死亡

時間 i++ score console function sss 間隔 app tint

我的小飛機和敵軍小飛機撞擊的效果的實現:

 1 /**
 2  * 定義我的飛機與敵機碰撞的方法:
 3  */
 4 function destoryMyPlane(){
 5     for(var i=0;i<enemyArray.length;i++){//外部先循環遍歷一次敵機數組:
 6         var enemyTop1=parseInt(enemyArray[i].enemyPlaneNode.style.top);
 7         var enemyLeft1=parseInt(enemyArray[i].enemyPlaneNode.style.left);
 8
var myPlaneTop=parseInt(myPlane.planeNode.style.top); 9 var myPlaneLeft=parseInt(myPlane.planeNode.style.left); 10 if(myPlaneLeft>enemyLeft1&&myPlaneLeft<enemyLeft1+64&&myPlaneTop>enemyTop1&&myPlaneTop<enemyTop1+56){ 11 playDiv.removeChild(enemyArray[i].enemyPlaneNode);
12 enemyArray.splice(i,1); 13 //myPlane 14 myPlane.blood=myPlane.blood-1; 15 } 16 } 17 }

敵軍boss

1 boss類的聲明

 1 /**
 2  * 定義敵方boss飛機的類
 3  * @param bossSrc
 4  * @param speed
 5  * @param x
 6  * @param y
 7  * @param blood
 8  */
 9 function createEnemyBoss(bossSrc,speed,x,y,blood){
10 this.bossSrc=bossSrc; 11 this.x=x; 12 this.y=y; 13 this.speed=speed; 14 this.blood=blood; 15 this.bossState=false; 16 this.dieTime=10; 17 this.bossNode=document.createElement("img"); 18 this.create=function(){ 19 this.bossNode.src=this.bossSrc; 20 this.bossNode.style.position="absolute"; 21 this.bossNode.style.left=this.x+"px"; 22 this.bossNode.style.top=this.y+"px"; 23 playDiv.appendChild(this.bossNode); 24 } 25 this.move=function(){ 26 if(bossLeft==false){ 27 this.bossNode.style.left=parseInt(this.bossNode.style.left)-this.speed+"px"; 28 }else{ 29 this.bossNode.style.left=parseInt(this.bossNode.style.left)+this.speed+"px"; 30 } 31 if(bossTop==false){ 32 this.bossNode.style.top=parseInt(this.bossNode.style.top)-this.speed+"px"; 33 }else{ 34 this.bossNode.style.top=parseInt(this.bossNode.style.top)+this.speed+"px"; 35 } 36 } 37 this.bossShot=function(){ 38 if(bossArray.length<=1){ 39 bossBulletArray.push(new createBossBullet("image/enemyBullet2.gif",parseInt(bossArray[0].bossNode.style.left)+80,parseInt(bossArray[0].bossNode.style.top)+80,10)); 40 } 41 } 42 this.create(); 43 this.move(); 44 }

2 控制boss在屏幕上的出現

  這裏可以聲明一個boss數組,將創建出的boss方法到數組中,通過判斷數組的長度,可以自定義屏幕上可以出現的boss的個數。

1 /**
2  * 定義敵方boss飛機出現的方法
3  */
4 function bossShow(){
5     if(bossArray.length<1){
6         var bossObj=new createEnemyBoss("image/enemy22.gif",5,200,200,10);
7         bossArray.push(bossObj);
8     }
9 }

3 控制boss 的移動

  在控制boss在屏幕上移動的時候,通過一個開關,控制boss移動的方法,並且可以控制boss不跑出界面。

 1 /**
 2  * 控制敵方boss飛機移動的方法
 3  */
 4 function bossMove(){
 5     for(i=0;i<bossArray.length;i++){
 6         if(parseInt(bossArray[i].bossNode.style.left)<10){
 7             bossLeft=true;
 8         }else if((parseInt(bossArray[i].bossNode.style.left)>353)){
 9             bossLeft=false;
10         }
11         if(parseInt(bossArray[i].bossNode.style.top)>400){
12             bossTop=false;
13         }else if(parseInt(bossArray[i].bossNode.style.top)<0){
14             bossTop=true;
15         }
16         bossArray[i].move();
17     }
18 }

4 控制boss發子彈

  為了控制boss子彈的發射間隔,我們定義了一個類似於控制子彈發射間隔時間的變量controlBossBullet=0。

  我們在使用setInterval方法發射子彈的時候,每次給controlBossBullet這個變量加1,

  當這個變量大於10的時候,執行一次boss的射擊方法。同樣的,這個子彈也會放入到一個數組中,這裏放入在調用bossShot()方法的時候就將子彈放入了boss子彈的數組。

 1 function bossShot(){
 2     //控制boss發子彈的方法
 3     if(controlBossBullet>10){
 4         for(i=0;i<bossArray.length;i++) {
 5             bossArray[i].bossShot();
 6         }
 7         controlBossBullet=0;
 8     }
 9     controlBossBullet=controlBossBullet+1;
10 }

5 控制boss飛機子彈的移動

1 /**
2  * 控制boss的子彈的移動方法
3  */
4 function bossBulletMove(){
5     for(i=0;i<bossBulletArray.length;i++){
6         bossBulletArray[i].move();
7     }
8 }

6 控制boss飛機子彈打擊我的小飛機

 1 /**
 2  * 定義敵機boss子彈與我的飛機碰撞的方法:
 3  */
 4 function enemyBossBulletCrashMyPlane(){
 5     for(i=0;i<bossBulletArray.length;i++) {//先循環一遍boss飛機子彈的數組
 6         //bossBulletNode
 7         bossBulletLeft=parseInt(bossBulletArray[i].bossBulletNode.style.left);
 8         bossBulletTop=parseInt(bossBulletArray[i].bossBulletNode.style.top);
 9         //console.log("boss飛機子彈的top:"+bossBulletTop);
10         myPlaneLeft=parseInt(myPlane.planeNode.style.left);
11         myPlaneTop=parseInt(myPlane.planeNode.style.top);
12         if(bossBulletLeft>myPlaneLeft&&bossBulletLeft<myPlaneLeft+50&&bossBulletTop>myPlaneTop&&bossBulletTop<myPlaneTop+50){
13             playDiv.removeChild(bossBulletArray[i].bossBulletNode);
14             bossBulletArray.splice(i,1);
15             myPlane.blood=myPlane.blood-1;
16         }
17     }
18 }

7 動畫效果的實現

1 setBossShow=setInterval(bossShow,10000);//創建敵方boss的定時器
2 setBossMove=setInterval(bossMove,100);// 控制boss 移動的定時器
3 setbossShot=setInterval(bossShot,100);//控制boss 發射子彈的方法
4 setBoseBulletMove=setInterval(bossBulletMove,100);//控制boss子彈移動的方法
5 setEnemyBossBulletCrashMyPlane=setInterval(enemyBossBulletCrashMyPlane,100);//控制我的飛機的子彈與敵機boss碰撞的方法

敵軍boss 的死亡

  通過setInterval方法循環調用方法,控制子彈打擊boss,然後boss的血量減少,當減少為0的時候,boss消失。

  計時器調用方法:

  setDestroyEnemyBoss=setInterval(destroyEnemyBoss,1000);//控制我的飛機的子彈與敵機boss撞擊的方法

 1 /**
 2  * 當我的子彈打到boss的時候,控制boss的血量消失,並且
 3  */
 4 function destroyEnemyBoss(){
 5     for(i=0;i<bossArray.length;i++){
 6         for(j=0;j<myPlane.bulletArray.length;j++){
 7             myPlaneBulletLeft=parseInt(myPlane.bulletArray[j].bulletNode.style.left);
 8             myPlaneBulletTop=parseInt(myPlane.bulletArray[j].bulletNode.style.top);
 9             bossTop=parseInt(bossArray[i].bossNode.style.top);
10             bossLeft=parseInt(bossArray[i].bossNode.style.left);
11             if(myPlaneBulletLeft>bossLeft&&myPlaneBulletLeft<bossLeft+150&&myPlaneBulletTop<bossTop+150&&myPlaneBulletTop>bossTop){
12                 bossArray[i].blood--;
13                 console.log("boss飛機的血量:"+bossArray[i].blood);
14                 for(a=0;a<bossArray.length;a++){
15                     if(bossArray[a].blood<=0){
16                         playDiv.removeChild(bossArray[a].bossNode);
17                         bossArray.splice(a,1);
18                         score=score+100;
19                         kill=kill+1;
20                     }
21                 }
22                 playDiv.removeChild(myPlane.bulletArray[j].bulletNode);
23                 myPlane.bulletArray.splice(j,1);
24             }
25         }
26     }
27 }

最後整個JS打飛機的連載就結束了,希望看到的小夥伴能夠有自己的收獲。

[知了堂學習筆記]_JS小遊戲之打飛機(3)-飛機之間的互相撞擊,boss的出現,以及控制boss死亡