js新手写的打飞机游戏,面向过程写的。出了有的敌机不能打到的bug。希望大家帮忙看看

玩家大小60*60 敌机大小30*30 玩家子弹30*30 敌机子弹 15*15
代码如下 希望有高人指点一下
万分感谢。

window.onload=function(){
var num=1000;
var grade=0;
var oh=document.getElementsByTagName('h1');
var fj=Get('feiji');
var arr=[[],[],[]];
var di=setInterval(diji,1000);
bind(document,'keydown',Move(fj));


function move(obj,atr,dir,target,endFn){ //游戏元素移动
dir=parseInt(getstyle(obj,atr))<target?dir:-dir;
clearInterval(obj.timer);
obj.timer=setInterval(function(){
var speed=parseInt(getstyle(obj,atr))+dir;
if(speed>target&&dir>0||speed<target&&dir<0){
speed=target;
}
obj.style[atr]=speed+'px';
if(speed==target){
for(j=0;j<arr.length;j++){
for(i=0;i<arr[j].length;i++)
{
if(arr[j][i].offsetTop==target) {
arr[j][arr[j].length-1]
arr[j].splice(i,1);
}
}
}

document.body.removeChild(obj);
clearInterval(obj.timer);
endFn && endFn();
}


for(i=0;i<arr[1].length;i++) //判断敌方子弹是否命中
{
if(arr[1][i].offsetTop>fj.offsetTop-15&&arr[1][i].offsetTop<fj.offsetTop+60 && arr[1][i].offsetLeft>fj.offsetLeft-15&&arr[1][i].offsetLeft<fj.offsetLeft+60){
arr[1][i].parentNode.removeChild(arr[1][i]);
clearInterval(arr[1][i].timer);
arr[1].splice(i,1);
num --;
}


}
for(i=0;i<arr[0].length;i++) //判断玩家子弹是否命中
{
for(j=0;j<arr[2].length;j++){
if(arr[0][i].offsetTop>arr[2][j].offsetTop-30 && arr[0][i].offsetTop<arr[2][j].offsetTop+30 && arr[0][i].offsetLeft>arr[2][j].offsetLeft-30 && arr[0][i].offsetLeft<arr[2][j].offsetLeft+30){
arr[0][i].parentNode.removeChild(arr[0][i]);
arr[2][j].parentNode.removeChild(arr[2][j]);
clearInterval(arr[0][i].timer);
clearInterval(arr[2][j].timer);
arr[0].splice(i,1);
arr[2].splice(j,1);
grade++;

}


}



}
},15)
}



function diji(){ // 控制生成敌方飞机
var l=document.documentElement.clientWidth-30;
var h=document.documentElement.clientHeight-30;
img=document.createElement('img');
img.src='diji.png';
img.style.top=0;
img.style.left=(Math.random()*l)+'px';
arr[2].push(img);
document.body.appendChild(img);
move(img,'top',5,h);
create(img,0);


}





function create(obj,num){ //子弹生成
var im=[];
im[num] =document.createElement('img');
im[num].src=num>0?'zidan.png':'zidan1.png';
im[num].style.left=obj.style.left;
im[num].style.top=obj.style.top;
if(num<=0){arr[1].push(im[num]);}
else{arr[0].push(im[num]);}
document.body.appendChild(im[num]);
num>0?move(im[num],'top',10,0):move(im[num],'top',10,616);



}
function Move(obj){ //键盘时间感应以及玩家的移动
var json={};
document.onkeydown=function(ev){
var ev=ev||event;
ev.preventDefault();
json[ev.keyCode]=true;
}
var dan=setInterval(function(){
if(json[88]==true){ create(obj,1);}
},100);
var fei=setInterval(function(){
var t=obj.offsetLeft-20;
var p=obj.offsetTop-20;
var r=obj.offsetLeft+20;
var b=obj.offsetTop+20;
if(json[37]==true){if(t<0){t=0;}obj.style.left=t+"px";};
if(json[38]==true){if(p<0){p=0;}obj.style.top=p+"px";};
if(json[39]==true){if(r>document.documentElement.clientWidth-60){r=document.documentElement.clientWidth-60;}obj.style.left=r+"px";};
if(json[40]==true){if(b>document.documentElement.clientHeight-60){b=document.documentElement.clientHeight-60;}obj.style.top=b+"px";};
oh[0].innerHTML='当前血量为'+num;
oh[1].innerHTML='得分'+grade;
if(num==0){
alert('game over');clearInterval(fei);clearInterval(di);clearInterval(zidan);
clearInterval(dan);
btn.style.display='block';
}
},30);

document.onkeyup = function(ev){
delete json[ev.keyCode];

};

}


}
...全文
226 回复 打赏 收藏 举报
写回复
回复
切换为时间正序
请发表友善的回复…
发表回复
相关推荐
发帖
JavaScript

8.7w+

社区成员

Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
帖子事件
创建了帖子
2018-05-23 12:40
社区公告
暂无公告