2011-03-16 65 views
0

我有一個bCoord數組,其中包含圖像x,y的位置,寬度和高度。我想插入其他對象到數組,而不是彼此覆蓋。如果數組對象的大小大於或等於我想插入的對象的大小,那麼源代碼運行得非常好,否則不會。我有一個解決方案,但這不是很好。如果有人對此問題有很好的解決方案,請與我分享。兩個物體覆蓋

this.isCover = function(pixel, width, height) 
{ 
    for (var i=0; i<bCoords.length; i++) 
     if (isThereBuilding(bCoords[i],pixel.x, pixel.y) || isThereBuilding(bCoords[i],pixel.x+width, pixel.y) || 
      isThereBuilding(bCoords[i],pixel.x, pixel.y+height) ||isThereBuilding(bCoords[i],pixel.x+width, pixel.y+height)) 
       return bCoords[i];    
    return null; 
} 
function isThereBuilding(obj,x, y) 
{ 
    return (obj.x <= x && (obj.w+obj.x)>= x) && (obj.y <= y && (obj.h+obj.y) >= y); 
}  

回答

1

您可以使用此功能來檢查的對象重疊的另一:

hitTest = function(o, l){ 
    function getOffset(o){ 
     for(var r = {l: o.offsetLeft, t: o.offsetTop, r: o.offsetWidth, b: o.offsetHeight}; 
      o = o.offsetParent; r.l += o.offsetLeft, r.t += o.offsetTop); 
     return r.r += r.l, r.b += r.t, r; 
    } 
    for(var b, s, r = [], a = getOffset(o), j = isNaN(l.length), i = (j ? l = [l] : l).length; i; 
     b = getOffset(l[--i]), (a.l == b.l || (a.l > b.l ? a.l <= b.r : b.l <= a.r)) 
     && (a.t == b.t || (a.t > b.t ? a.t <= b.b : b.t <= a.b)) && (r[r.length] = l[i])); 
    return j ? !!r.length : r; 
}; 

找到here

+0

謝謝!我喜歡這個網站。 – 2011-03-17 08:42:32