Javascript 碰撞检测未检测
我有一个对象数组,它们都是“矩形”。我还有一个圆,它是物体。我用于重力的方程式是: newYPos=oldYPos+下降速度+重力 基本上,我是把重力的速率加到上一帧中圆圈“落下”的像素数上,然后把它加到最后一帧中圆圈的位置上 我使用以下代码检测球的任何部分是否位于任何对象的内部:Javascript 碰撞检测未检测,javascript,jquery,html,canvas,collision-detection,Javascript,Jquery,Html,Canvas,Collision Detection,我有一个对象数组,它们都是“矩形”。我还有一个圆,它是物体。我用于重力的方程式是: newYPos=oldYPos+下降速度+重力 基本上,我是把重力的速率加到上一帧中圆圈“落下”的像素数上,然后把它加到最后一帧中圆圈的位置上 我使用以下代码检测球的任何部分是否位于任何对象的内部: for(var i = 0; i < objects.length; i++){ if(ball.x > objects[i].x - ball.r && ball.y >
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);
}
}
该代码检查圆的坐标加上或减去半径是否大于框壁的顶部/左侧位置,是否小于框壁的右侧/底部位置
球一度在物体内部,但我从未得到警告。我已经尝试了我能想到的一切。希望我只是犯了一些我看不出来的愚蠢的错误
如果您想弄乱我的代码或不理解变量,这里有一个JSFIDLE:
小问题是:
您有四个对象
其中两个数字1和3又高又瘦,在左边或右边。球从不靠近他们。
其中一个2号球又短又宽,在y坐标上比球所能达到的要小。
另一个数字0是短而宽的,它的y坐标是一个真实的物理球将通过的坐标-但是因为你的球以离散的步骤移动,你的脚本从来没有看到它这样做。从y=580.4到y=601.2。
最大的问题是:
在JSFIDLE中,碰撞测试中的所有比较似乎都是完全错误的:-。这很奇怪,因为代码中的那些是正确的方法
更改了这两个参数后,我将球移动了0.1*gSy,而不是gSy,并翻转了所有比较运算符,检测到碰撞。所有对象都按对象的半径增长。我最终会让它根据球的方向而不是位置进行检测。你能把链接贴到你的代码版本上吗?很遗憾,如果球在一帧内移动的距离超过这个距离,那么我会接受球半径的增长是不够的。修改后的代码是,虽然没有更多的mods比我上面所描述的。