Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 碰撞检测未检测_Javascript_Jquery_Html_Canvas_Collision Detection - Fatal编程技术网

Javascript 碰撞检测未检测

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 >

我有一个对象数组,它们都是“矩形”。我还有一个圆,它是物体。我用于重力的方程式是:

newYPos=oldYPos+下降速度+重力

基本上,我是把重力的速率加到上一帧中圆圈“落下”的像素数上,然后把它加到最后一帧中圆圈的位置上

我使用以下代码检测球的任何部分是否位于任何对象的内部:

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比我上面所描述的。