碰撞检测未检测到

时间:2012-07-09 01:05:25

标签: javascript jquery html5 canvas collision-detection

我有一个对象数组,都是'矩形'。我也有一个圆形物体。我用于引力的等式是:

newYPos = oldYPos + prevFallingSpeed + gravity

基本上,我将重力加到前一帧中圆圈“掉落”的像素数,然后将其添加到最后一帧中圆圈的位置。

我正在使用此代码检测球的任何部分是否在任何物体内:

for(var i = 0; i < objects.length; i++){
    if(ball.x > objects[i].x - ball.r && ball.y > objects[i].y - ball.r && ball.x < ball.r + objects[i].x + objects[i].w && ball.y < ball.r + objects[i].y + objects[i].h){
        alert('test');
        gSy = (-1 * gSy);
    }
}

代码检查圆的坐标加上或减去半径是否大于框的墙的顶部/左侧位置,小于框的墙的右/底位置。

球在一个点内位于物体内部,但我从未得到过警报。我已经尝试了所有我能想到的东西。希望我只是犯了一些我无法看到的愚蠢错误......

如果您想要弄乱我的代码或者不理解变量,那么这是一个jsfiddle:

http://jsfiddle.net/JGKx5/

1 个答案:

答案 0 :(得分:0)

小问题:

你有四个对象。

  • 其中两个(数字1和3)又高又瘦,向左或向右。球永远不会靠近他们。
  • 其中一个(数字2)短而宽,y坐标小于球的数量。
  • 另一个(数字0)是短而宽的,它的y坐标是真正的物理球将通过的坐标 - 但是因为你的球以不连续的步骤移动,你的脚本实际上从未看到它这样做。 (它从y = 580.4到y = 601.2。)

最大的问题:

在jsfiddle中,碰撞测试中的所有比较似乎都是错误的方式:-)。 (这是奇怪的,因为这里的代码中的那些是正确的方法。)

随着这两个变化(我使球移动0.1 * gSy而不是gSy,并翻转所有比较运算符),检测到碰撞。

相关问题