我试图编写一个蛇游戏(我对这一切都不熟悉)并且我目前仍然坚持这个碰撞功能。我尝试按照此处的说明Detecting collision of rectangle with circle 但我还是很困惑。例如,圆和矩形的坐标X和Y总是在变化。此外,我不知道如何在我的游戏板对象中调用我的圆形和矩形元素,我正在编写碰撞检测... snakeHead是我的圈子,foodElement是我的矩形。
这是我的代码...对不起,如果我没有以超清晰的方式表达自己,那么混乱......
function collision(snakeHead, FoodElement) {
var snakeHead = {x, y, r}; //r is radian
var FoodElement = {x, y, w, h}; //w: width, h: height
var distX = Math.abs(snakeHead.x - FoodElement.y - FoodElement.w / 2);
var distY = Math.abs(snakeHead.x - FoodElement.y - FoodElement.h /2);
if (distX > (FoodElement.w/2 + circle.r)) {return false;}
if (disY > (FoodElement.h/2 + circle.r)) {return false;}
if (distX <= (FoodElement.w/2)) { return true; }
if (distY <= (FoodElement.h/2)) { return true; }
var dx = distX - FoodElement.w/2;
var dy = distY - FoodElement.h/2;
return (dx*dx+dy*dy<=(snakeHead.r*snakeHead.r));
console.log("IMPACT"); }
答案 0 :(得分:0)
有些线条似乎不正确,这是我的修正(我认为snakeHead位置是头部的中心):
var distX = Math.abs(snakeHead.x - FoodElement.x - FoodElement.w / 2);
var distY = Math.abs(snakeHead.y - FoodElement.y - FoodElement.h / 2);