2014-01-21 27 views
0

I,m使用一個小腳本來檢測兩個元素是否發生碰撞。應用/使用具有相同類別的多個div的函數IQUERY

function collision($yo, $obstaculo) { 
var x1 = $yo.offset().left; 
var y1 = $yo.offset().top; 
var h1 = $yo.outerHeight(true); 
var w1 = $yo.outerWidth(true); 
var b1 = y1 + h1; 
var r1 = x1 + w1; 
var x2 = $obstaculo.offset().left; 
var y2 = $obstaculo.offset().top; 
var h2 = $obstaculo.outerHeight(true); 
var w2 = $obstaculo.outerWidth(true); 
var b2 = y2 + h2; 
var r2 = x2 + w2; 

if (b1 < y2 || y1 > b2 || r1 < x2 || x1 > r2) return false; 
return true; 

}

我的問題了,我不知道如何使用功能與所有與類名「.obstacle」的div。知道對不對I'm調用該函數是這樣的:

collision($('#character'),$('.obstacle')); 

編輯:我已經鑄成使用。每個在jfiddle測試,但似乎不起作用。出於某種原因,只檢索拉斯元素,它總是返回true:

http://jsfiddle.net/Osaka_lime/jV9Ls/27/

像往常一樣,對不起我的可怕的英語和感謝名單!!!!

回答

0

我已經找到了解決辦法。每個與我的函數調用碰撞:

pum = false; 
     $(".obstaculo").each(function() { pum = pum || collision($('#character'), $(this), dir) }); 

你可以看到它在這裏工作:

http://jsfiddle.net/jV9Ls/29/

晚安!

0

因爲$ obstaculo可能有多個對象,你將不得不遍歷集合中的所有div並檢查每個對象。使用jQuery,你就必須這樣做:

function collision($yo, $obstaculo) { 
    var x1 = $yo.offset().left; 
    var y1 = $yo.offset().top; 
    var h1 = $yo.outerHeight(true); 
    var w1 = $yo.outerWidth(true); 
    var b1 = y1 + h1; 
    var r1 = x1 + w1; 

    $obstaculo.each(function() { 
     var x2 = $(this).offset().left; 
     var y2 = $(this).offset().top; 
     var h2 = $(this).outerHeight(true); 
     var w2 = $(this).outerWidth(true); 
     var b2 = y2 + h2; 
     var r2 = x2 + w2; 
     if (b1 < y2 || y1 > b2 || r1 < x2 || x1 > r2) return false; 
    }); 

    return true; 
} 

請注意,我沒有測試代碼,但希望你可以用這個作爲一個例子,它可以給你下一步去哪裏的想法。

+0

Thanx爲您提供幫助,我正在嘗試使用您的.each功能,但似乎總是回覆真實的,您可以在此鏈接中看到我的代碼: http://jsfiddle.net/Osaka_lime/jV9Ls/27/ – user3214649

+0

好吧,我已經找到了.each解決方案,你可以在這個jfiddle http://jsfiddle.net/jV9Ls/29/ Thanx中看到你的幫助。 – user3214649

+0

抱歉沒有儘早回覆您,但很高興您找到了解決方案! – mkowalski

相關問題