测试我的比赛,并在用户和怪物碰撞我希望告警弹出,但没有运气:画布碰撞?
function die() {
for (var i = 0; i < monster.length; i++) {
if (user.destinationX === monster[i].destinationX && user.destinationY === monster[i].destinationY {
alert("die");
}
}
}
测试我的比赛,并在用户和怪物碰撞我希望告警弹出,但没有运气:画布碰撞?
function die() {
for (var i = 0; i < monster.length; i++) {
if (user.destinationX === monster[i].destinationX && user.destinationY === monster[i].destinationY {
alert("die");
}
}
}
尝试这种碰撞检测方法。它基于两个对象的重叠来检测两个对象之间的碰撞。
function hasCollision(object1, object2) {
if (object1.x + object1.width < object2.x) return false;
if (object1.x > object2.x + object2.width) return false;
if (object1.y + object1.height < object2.y) return false;
if (object1.y > object2.y + object2.height) return false;
return true;
}
function die() {
for (var i = 0; i < monster.length; i++) {
if (hasCollision(user, monster)) {
alert("die");
}
}
}
该碰撞检测考虑了两个对象是否重叠的对象(方形/矩形),并检查的形状。它还需要对象的宽度和高度来确定对象边缘的位置(或者您可以根据当前的内容对其进行修改)。
请不要只是在没有任何解释的情况下发布代码 – 2013-04-25 14:44:38
@Kolink对不起。实际上是在进行一些解释的过程:) – 2013-04-25 14:51:03
我将提供一个合并答案和解释。如果您喜欢解释,请拨打karaxuna或user2317489。
正如Kolink所说,你的问题在于pacman小故障,或者说,你的怪物不仅仅是像素 - 它们有自己的大小。您目前正在检查一个对象的来源,并查看它是否与另一个对象完全相同 - 如果有的话,这种情况很少会发生。相反,你需要检查的是怪物是否至少有一个共同点(换句话说,碰撞检查)。
这可以通过检查一个的原点是否在另一个的边界框内,或者换句话说,如果monster2.x <= monster1.x <= (monster2.x+monster2.width)
和monster2.y <= monster1.y <= (monster2.y+monster2.height)
来进行。 Arnelle Balane没有提供解释的代码就是这样做的。
这并不总是一个很好的近似值,因为它一味地假设你的怪物是一个正方形。要使它成为一个圆圈,你需要检查一个怪物的中心是否在另一个中心的一定距离内(其中距离是公制的,并且使用sqrt(pow(x,2)+pow(y,2))
计算,所有这些都是更精细的细节,但是
什么你遇到的情况类似于PacMan中的小故障,你可以偶尔在没有死亡的情况下直接穿过幽灵行走,也就是说,期望位置相等,而不是检查它们之间的距离是否太近 – 2013-04-25 14:38:05