0

我有一组都是“矩形”的对象。我也有一个圆圈是对象。我用于重力的方程式是:

newYPos = oldYPos + prevFallingSpeed + 重力

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

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

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/

4

1 回答 1

0

小问题:

你有四个对象。

  • 其中两个(数字 1 和 3)又高又瘦,偏向左侧或右侧。球永远不会靠近他们。
  • 其中一个(2 号)又短又宽,在 y 坐标上比球所能达到的要小。
  • 另一个(数字 0)又短又宽,它的 y 坐标是一个真正的物理球会穿过的坐标——但是因为你的球以离散的步长移动,你的脚本实际上从来没有看到它这样做。(它从 y=580.4 变为 y=601.2。)

最大的问题:

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

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

于 2012-07-09T01:31:16.300 回答