正如@Aram 指出的那样,瓶颈在于 .getIntersections() 函数。
.getIntersections() 函数非常占用内存/处理,因此您需要进行初步检查,将处理限制在某些位置。我制作的一个小游戏也遇到了类似的问题,.getIntersections() 的碰撞检测正在扼杀我的速度,我也尝试了 .intersects() 但它有类似的结果。我所做的是这样的:(不知道这是否适用于旋转)
element.on('dragmove',function(){ //dont think you need the 'evt' passed here
var position = stage.getUserPosition();
var snapChildren = snapGroup.getChildren(); //get each snapGroup child
for(var i=0; i<snapChildren.length; i++){
if(position.x > snapChild[i].getX() && position.x < snapChild[i].getX()+snapChild[i].getWidth()){ // check horizontal bounding rectangle
if(position.y > snapChild[i].getY() && position.y < snapChild[i].getY()+snapChild[i].getHeight(){ // check vertical bounding rectangle
var snap = snapGroup.getIntersections(position.x,position.y);
if(snap.length > 0) snapElement(snap[0]);
}
}
}
}
所以这是一种“边界矩形”碰撞检测方法,应该尽量减少你必须做的处理。
即使您正在获取所有孩子并在 for 循环中处理它们,它仍然比 .getIntersections() 快