2011-03-24 17 views
32

Sadece iki div ile basit bir balon oyunu geliştiriyorum. Sorun, iki divanın birbirlerine değdiği zaman bir fonksiyonu tetikleyemem.İki div, jquery ile temas halinde nasıl belirlenir?

+0

Yani div'ler hareket ediyor mu? Ya da tam olarak ne oluyor ve neden yapmaya çalışıyorsun? – justkt

+0

jQuery draggables ya da başka bir şey kullanıyor musunuz? Bu sorunun cevabı almak için daha fazla bilgi/açıklama gerekiyor. – Tejs

+0

Lütfen daha fazla bilgi ve bazı kodları sağlayın. – Ant

cevap

56

Sınırlayıcı kutu çarpışma algılamasını arıyorsunuz. Bir etkinliği yükseltmek isterseniz, tekrar tekrar test etmelisiniz, ancak oyun döngüsünüzdeki tüm oyun nesneleri üzerindeki işlevi çalıştırmak daha iyi olurdu. sandbox http://jsfiddle.net/nGRwt/7/

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

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

teşekkürler, yararlı – thelost

+1

Nasıl olurdu? Biri div'in yan yana oturmasına izin vermek için değil, üst üste gelmesine izin vermek için bunu düzenleyin. –

+0

Hey @BC. Bu kodu atıfta bulunmadan serbestçe kopyalayıp kullanmamın sakıncası var mı? –

10

de misin jquery-collision artı jquery-ui-draggable-collision deneyebilirsiniz olduğunu. Tam açıklama: Sadece bunları kaynak kodunda yazdım ve yayınladım.

öncelikle bu izin verir:

"#collider" örtüşen tüm ".obstacle" listesidir
var hit_list = $("#collider").collision(".obstacle"); 

. bağlanma (diğer şeyler arasında) verir

$("#collider").draggable({ obstacle: ".obstacle" }); 

, bir "çarpışma" olayı:

ikinci verir

$("#collider").bind("collision", function(event,ui){...}); 

Ve hatta ayarlayabilirsiniz:

$("#collider").draggable({ obstacle: ".obstacle", preventCollision: true }); 
"#collider" öğesini sürüklerken herhangi bir ".obstacle" ile örtüşmesini önlemek için

.

+2

Çok güzel Plugin! – user2896540

İlgili konular