Javascript 画布游戏:碰撞检测
对于我的教育,我必须用HTML5画布制作一个基本的游戏。这个游戏是射击游戏。当你可以向左->向右移动时,空间被射出。当我开枪时,子弹会向上移动。敌人向下移动。当子弹击中敌人时,敌人必须消失,它将获得+1分。但是当敌人出现在屏幕上时,它就会消失 演示: 空间=射击+敌人出现 这是我的代码:Javascript 画布游戏:碰撞检测,javascript,html,canvas,html5-canvas,Javascript,Html,Canvas,Html5 Canvas,对于我的教育,我必须用HTML5画布制作一个基本的游戏。这个游戏是射击游戏。当你可以向左->向右移动时,空间被射出。当我开枪时,子弹会向上移动。敌人向下移动。当子弹击中敌人时,敌人必须消失,它将获得+1分。但是当敌人出现在屏幕上时,它就会消失 演示: 空间=射击+敌人出现 这是我的代码: for (i=0;i<enemyX.length;i++) { if(enemyX[i] > canvas.height) {
for (i=0;i<enemyX.length;i++) {
if(enemyX[i] > canvas.height) {
enemyY.splice(i,1);
enemyX.splice(i,1);
} else {
enemyY[i] += 5;
moveEnemy(enemyX[i],enemyY[i]);
}
}
for (i=0;i<bulletX.length;i++) {
if(bulletY[i] < 0) {
bulletY.splice(i,1);
bulletX.splice(i,1);
} else {
bulletY[i] -= 5;
moveBullet(bulletX[i],bulletY[i]);
for (ib=0;ib<enemyX.length;ib++) {
if(bulletX[i] + 50 < enemyX[ib] ||
enemyX[ib] + 50 < bulletX[i] ||
bulletY[i] + 50 < enemyY[ib] ||
enemyY[ib] + 50 < bulletY[i])
{
++score;
enemyY.splice(i,1);
enemyX.splice(i,1);
}
}
}
}
我想我看到了一个问题。关于碰撞检测,您有以下代码
if(bulletX[i] + 50 < enemyX[ib] ||
enemyX[ib] + 50 < bulletX[i] ||
bulletY[i] + 50 < enemyY[ib] ||
enemyY[ib] + 50 < bulletY[i])
if(bulletX[i]+50
这是直线ORs(| |),并且+50位于小于一侧。这意味着,每当子弹不在命中框中时,它实际上应该触发为true。我怀疑您希望将+50设置在大于的一侧,而将ORs(| |)设置为ANDs(&&&)。关于Ben的修正,为了将来的参考,最好进行直线碰撞检测,而不是点框碰撞检测 原因是,假设你的敌人很小,你的子弹移动得很快。子弹总是有可能在一帧中出现在敌人前面,然后在下一帧中出现在敌人后面,因此永远不会记录为命中
测试与子弹路径的交叉点和敌人的假想线将更加准确。我想为非常具有描述性的主题“击中时移除敌人”给出+1,但为了SOs的缘故不能这样做!那你到底想要什么?如果你想要什么,请发表适当的问题。更适合问题的具体内容是什么?情况描述得很好,代码块看起来很相关-您遇到了什么问题?分数不是迭代的吗?敌人没有消失吗?这个东西会崩溃吗?你应该考虑自我维护对象来代表你的子弹/敌人等。
if(bulletX[i] + 50 < enemyX[ib] ||
enemyX[ib] + 50 < bulletX[i] ||
bulletY[i] + 50 < enemyY[ib] ||
enemyY[ib] + 50 < bulletY[i])