如何使用kineticjs确定形状是否接触另一种形状?

时间:2014-10-21 08:29:44

标签: html5-canvas kineticjs

我的动力学层中有许多形状。如果我将图形拖放到图层中的其他位置,如何确定掉落的形状是否会触及另一个形状?

1 个答案:

答案 0 :(得分: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');
         }
     }
 }

如果您拥有的形状是某种形状的矩形,则效果很好,但如果您有两个圆形,则效果不是很好,因为它们具有半径。所以这足以快速检查碰撞,接下来你需要另一个能更准确地检查碰撞的功能。

你也可以尝试在box2d中使用kineticjs,有很多关于这个主题的教程。