开发html5 2d 赛车游戏以及打包发布为手机APP 第四话 敌人出动

阅读更多

上一话完成了拖拽移动功能,现在是时候让NPC车辆自动出现了

 

前几话,咱们有几张车子的图片还没用到,这话使用它们吧

 

首先定义一个数组变量,用于存放大量的NPC车子队伍

 

 

var npccars;

npccars = new Array();

 

 

然后在animate()方法中里面添加一个setnpccar()方法用来自动增加NPC车

 

function setnpccar() {
				
					var carnpc1 = Object.create(Car);
					var deshu = (Math.random() * 10) * (300 / 10);
				
					carnpc1.x = deshu;
					carnpc1.y = 0-80;
					carnpc1.img = new Image();
			
					switch (Math.floor(Math.random() * 5)) 
					{
						case 0:
							carnpc1.img.src = "img/car2.png";
							break;
						case 1:
							carnpc1.img.src = "img/car3.png";
							break;
						case 2:
							carnpc1.img.src = "img/car4.png";
							break;
						case 3:
							carnpc1.img.src = "img/car5.png";
							break;
						case 4:
							carnpc1.img.src = "img/car6.png";
							break;
					}
					carnpc1.width = 40;
					carnpc1.height = 80;
					

				npccars.push(carnpc1);


				if (npccars.length > 0) 
				{
					for (var i = 0; i < npccars.length; i++) {
						npccars[i].y += 5;
                                               						                                if(npccars[i].y>540)
										                                        {
										                                             npccars[i].y=-80;
										   	                                     npccars.pop ();
					         }
		             }
				}
				
			}

 

 

解释:var carnpc1 = Object.create(Car);           代表新定义一个变量,并把它实例化为Car类,也就是生成一辆新车

 

var deshu = (Math.random() * 10) * (300 / 10);        代表根据屏幕的宽随机生成屏幕宽除以10再乘以随机1到10系数的X坐标,我们这里的屏幕宽为300,可以修改为自己需要的屏幕宽度;这样就会根据屏幕宽随机生成X坐标

 

carnpc1.x = deshu;      代表把上面的X坐标值赋值给新车

carnpc1.y = 0-80;        代表把0减去车子的高度的Y坐标赋值给新车

 

carnpc1.img = new Image();   实例化图片对象并赋值给新车

 

switch (Math.floor(Math.random() * 5)) 

{

case 0:

carnpc1.img.src = "img/car2.png";

break;

case 1:

carnpc1.img.src = "img/car3.png";

break;

case 2:

carnpc1.img.src = "img/car4.png";

break;

case 3:

carnpc1.img.src = "img/car5.png";

break;

case 4:

carnpc1.img.src = "img/car6.png";

break;

}      

代表用switch 条件选择 Math.floor(Math.random() * 5) 的得数,也就是随机生成0-4的数字,并根据得出数字做如果为0作case 0的处理(把新车的图片路径赋值为“img/car2.png”), 如果为1作case 1的处理(把新车的图片路径赋值为“img/car3.png”),如果为2作case 2的处理(把新车的图片路径赋值为“img/car4.png”),如果为3作case 3的处理(把新车的图片路径赋值为“img/car5.png”),如果为4作case 4的处理(把新车的图片路径赋值为“img/car6.png”)

 

carnpc1.width = 40;       //代表把新车的宽度赋值为40

 

carnpc1.height = 80;     //代表把新车的高度赋值为80

 

 

npccars.push(carnpc1);  //代表把新车对象放进定义的NPC车子数组里,便于保存

 

 

 

if (npccars.length > 0) 
				{
					for (var i = 0; i < npccars.length; i++) {
						npccars[i].y += 5;
						   if(npccars[i].y>540)
										   {
										   npccars[i].y=-80;
										   	npccars.pop ();
										   	
										   }
					
		             }
			
				}

 解释:if (npccars.length > 0)    当npc车子数组的长度大于0的时候做下面处理  

 


 for (var i = 0; i < npccars.length; i++) {}   用for循环巡视NPC车子数组中的每一辆车子 

并且把每一辆车子的Y坐标加上5     npccars[i].y += 5;  

 

如果每一辆车子中,有车子的y坐标已经大于屏幕的高度540,把这辆车子的y坐标设为负80    npccars[i].y=-80;

并且删除NPC车辆数组里面的最后一个元素    npccars.pop ();

 

 

 

由于在animate()方法里面,setnpccar()方法也会同样不断执行,NPC车子就会大量出现在我们的屏幕中,并且向下移动

 

最后只需要在animate()方法里面根据NPC车子数组的总长度,画出所有NPC车子

  1.   if (npccars.length > 0) {  
  2.                     //ctx.fillText(npccars.length, 10, 20);  
  3.                     for (var i = 0; i < npccars.length; i++) {  
  4.                         ctx.drawImage(npccars[i].img, npccars[i].x, npccars[i].y, npccars[i].width, npccars[i].height);  
  5.                     }  
  6.                 }  

 


开发html5 2d 赛车游戏以及打包发布为手机APP 第四话 敌人出动_第1张图片

 

很容易想象,这样密集的NPC车,咱们的主角车肯定被辗轧,死定了,,,,

 


 
 而且图上面显示的NPC车子还互相辗轧对方,看起来很不现实,车子怎么能互相辗轧呢,所以我们下一话来优化NPC的出现,,并且来实现NPC车对主角车的碰撞检测

 

完整代码

 




	
		
		
		赛车游戏
		
	

	
		

		
	

 

 

 

  • 开发html5 2d 赛车游戏以及打包发布为手机APP 第四话 敌人出动_第2张图片
  • 大小: 240.3 KB
  • 开发html5 2d 赛车游戏以及打包发布为手机APP 第四话 敌人出动_第3张图片
  • 大小: 15.3 KB
  • 查看图片附件

你可能感兴趣的:(html5,游戏,html)