我的动力学层中有许多形状。如果我将图形拖放到图层中的其他位置,如何确定掉落的形状是否会触及另一个形状?
答案 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,有很多关于这个主题的教程。