js飞机大战碰撞检测
程序员文章站
2024-03-15 21:39:00
...
// 为每个方块检测top和left值
function opinion() {
var boxCoord = []; // 用来记录方块的坐标和当前标识
for (var i = 0; i < pss.length; i++) {
boxCoord[i] = []; // 创造一个两元数组
boxCoord[i][0] = i; // 标识
boxCoord[i][1] = pss[i].offsetTop; // 获取敌机top值
boxCoord[i][2] = pss[i].offsetLeft; // 获取敌机left值
}
return boxCoord;
}
// 为每个子弹检测top和left值
function issOpinion() {
var bulletCoord = []
for (var i = 0; i < iss.length; i++) {
bulletCoord[i] = []; // 创造一个两元数组
bulletCoord[i][0] = i; // 标识
bulletCoord[i][1] = iss[i].offsetTop; // 子弹的top值
bulletCoord[i][2] = iss[i].offsetLeft; // 子弹的left值
}
return bulletCoord;
}
碰撞检测
function PK() {
var opinionS = opinion(); //获取所有方块的数据
var issOpinionS = issOpinion(); // 获取所有子弹的数据
for (var zz = 0; zz < issOpinionS.length; zz++) {
for (var i = 0; i < opinionS.length; i++) {
if (issOpinionS[zz][1] < opinionS[i][1] + bsh && issOpinionS[zz][1] > opinionS[i][1] -
ish &&
issOpinionS[zz][2] < opinionS[i][2] + bsw && issOpinionS[zz][2] > opinionS[i][2] - isw
) {
var deletei = pss[i] || null; // 待处理敌机
var deleteb = iss[zz] || null; // 待处理子弹
adjust(1) // 加1分
difficulty() // 调整难度
if (deletei != null) {
emsX = pss[i].offsetLeft;
emsY = pss[i].offsetTop;
pss[i].a -= 1; // 敌机血量-1
if (pss[i].a <= 0) {
box.removeChild(pss[i]);
foe.vanish(); // 调用敌机消失动画
}
}
if (deleteb != null) {
box.removeChild(iss[zz]);
}
}
}
}
}
setInterval(PK, 20);
上一篇: 大数据Top K问题
下一篇: 最小的k个数(最大堆,海量数据)