这是我的jsfiddle:http://jsfiddle.net/whZ44/8/
我要做的是检测球何时击中一个支架的顶部边框。如果它确实比球的新坐标应该是支架的坐标,就像涂鸦跳跃游戏一样。但似乎我的碰撞检测功能不起作用
if (Collision(ball, std4)) {
console.log("collision");
ball.y = std2.x;
}
我正在使用的碰撞功能,我真的不知道它是否在我的条件下工作:
function Collision(circle, rect) {
var distX = Math.abs(circle.x - rect.x - rect.w / 2);
var distY = Math.abs(circle.y - rect.y - rect.h / 2);
if (distX > (rect.w / 2 + circle.r)) { return false; }
if (distY > (rect.h / 2 + circle.r)) { return false; }
if (distX <= (rect.w / 2)) { return true; }
if (distY <= (rect.h / 2)) { return true; }
var dx = distX - rect.w / 2;
var dy = distY - rect.h / 2;
return (dx * dx + dy * dy <= (circle.r * circle.r));
}
答案 0 :(得分:0)
如果您不太担心事后圈子会如何反应,那么您是否考虑过为圈子使用边界矩形?
这篇文章还讨论了圈子变通:
2d collision response between circles
这篇文章是对2d物理学的一个很好的解释:
http://devmag.org.za/2009/04/13/basic-collision-detection-in-2d-part-1/
答案 1 :(得分:0)
碰撞功能还可以,你刚才有一些变量名称错误:
if (Collision(ball, std4)) {
console.log("collision");
ball.y = std2.x;
}
要
if (Collision(ball, std2)) {
console.log("collision");
ball.y = std2.y;
}
演示:http://jsfiddle.net/whZ44/9/
为了进一步开发,您应该将所有障碍物存储在一个数组中,因为您必须检查所有障碍物,而不仅仅是一个。