2014-10-21 2 views
1

У меня есть несколько фигур в моем кинеточном слое. Если я перетаскиваю фигуру где-то еще в слое, то как определить отбрасываемую форму касается другой формы или нет?Как определить форму, касающуюся другой формы или не используя кинетику?

+1

KineticJS не имеет встроенного обнаружения столкновения. Математически вам нужно будет провести испытания на столкновение. – markE

+0

Хорошо. Спасибо за ответ. – jrath

ответ

0

Вещь, которую вам нужно сделать, это создать математическое представление форм, которые у вас есть. Для наиболее простого обнаружения столкновений вы можете использовать ограничивающие поля.

В принципе, если у вас есть круг, вы можете создать его представление как ограниченное в ящике.
Тогда, если у вас есть квадрат, вы можете проверить, пересекается ли ограничивающая рамка квадрата (который является самим квадратом) с ограничивающей рамкой круга.

Я написал ответ на это некоторое время назад: HTML5/kineticJS getIntersection function implementation

function checkCollide(pointX, pointY, objectx, objecty, objectw, objecth) { // pointX, pointY belong to one rectangle, while the object variables belong to another rectangle 
     var oTop = objecty; 
     var oLeft = objectx; 
     var oRight = objectx+objectw; 
     var oBottom = objecty+objecth; 

     if(pointX > oLeft && pointX < oRight){ 
      if(pointY > oTop && pointY < oBottom){ 
       return 1; 
      } 
     } 
     else 
      return 0; 
}; 

используется так:

var children = layer.getChildren(); 
for(var i=0; i<children.length; i++){ // for each single shape 
    for(var j=0; j<children.length; j++){ //check each other shape 
     if(i != j){ //skip if shape is the same 
      if(checkCollide(children[i].getX(), children[i].getY(), children[j].getX(), children[j].getY(), children[j].getWidth(), children[j].getHeight())) 
       alert('top left corner collided'); 
     } 
    } 
} 

Это прекрасно работает, если форма у вас есть прямоугольник какой-то, но не это здорово, если у вас есть два круга, так как они имеют радиус. Таким образом, этого достаточно для быстрой проверки столкновения, затем вам понадобится другая функция, которая будет более точно проверять столкновения.

Вы также можете попробовать использовать kineticjs с box2d, есть куча учебников по этой теме.

+0

Спасибо за ответ !!. Я думаю, это сработает. – jrath