由於@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()
爲什麼不問在http://gamedev.stackexchange.com/ – Cybermaxs
這是否碰撞檢測代碼真的屬於'dragmove'嗎?爲什麼不''dragstop'? – jbabey
它必須在dragmove事件,因爲我正在拖動元素,因爲它拖動可能的放置位置 –