2017-02-21 8 views
0

Я пытаюсь закодировать змеиную игру (я новичок в этом), и я сейчас застрял на этой функции столкновения. Я пытался следовать инструкциям здесь 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

Некоторые линии, кажется, неправильно, вот моя поправка (я должен змеяНаша позиция - центр головки):

var distX = Math.abs(snakeHead.x - FoodElement.x - FoodElement.w/2); 
var distY = Math.abs(snakeHead.y - FoodElement.y - FoodElement.h/2);