2016-04-04 18 views
0

Javascipt oyunumda oyuncu, mermi ve düşman arasında bir çarpışma yaşıyorum. Daha önce, mermi dikdörtgenlerdi, ama şimdi imgelerim var. Görüntüler dikdörtgen bir kutuya sıkıca sığar, 2D çarpışma çalışması bekleniyordu. İşte görüntü şu şekildedir: Mermi bir şekilde dikdörtgen şeklindedir. Çarpışma biraz çalışırBu 2B çarpışma neden görüntülerim için tam olarak çalışmıyor?

return rect1.x <= rect2.x+rect2.width 
    && rect2.x<=rect1.x+rect1.width 
    && rect1.y<=rect2.y+rect2.height//if all statements are true, they are  colliding 
    && rect2.y<=rect1.y+rect1.height; 

Ancak mermi anlamlı oynatıcının altında olabilir ve yine çarpışma tetikleyebilir ve üstten oyuncu olmadan içeri önemli ölçüde üçüncü yol olabilir: Benim çarpışma sisteminde bu mantığı kullanmak çarpışmayı tetikliyor. Düzeltmek için yapabileceğim bir şey var mı? Çarpışma sistemi sadece dikdörtgensel olarak kusursuz çalıştı ve burada yeterince yakın olmalıydı, ama yeterince iyi değil. Kaynak kodunu ve kendiniz için sorunu görmek istiyorsanız, geliştirmemdeki gerçek oyunumun bağlantısı: JS Game

cevap

1

Eşit işaretlerinizi kaldırmaya çalışın ve çarpışma olup olmadığını kontrol edin, ancak "dış" olun.

if (rect1.x + rect1.width < rect2.x) //left outside 
    return false; 
if (rect1.x > rect2.x + rect2.width) //right outside 
    return false; 
if (rect1.y + rect1.height < rect2.y) //above/below outside 
    return false; 
if (rect1.y > rect2.y + rect2.height) //above/below outside 
    return false; 
return true; 

bu örnek oyununuz için farklı çalışır mı (Ayrıca bir satır içine kaydırmak olabilir, ama bu benim söylemek istediğimi açıkça umut)?

+0

Kodunuzu kullanmayı denedim ve sonuç aynıydı. Bu dikdörtgenler ile çalışır, ancak bir nedenle, görüntü ile kaydırılır. Değerlerle oynamayı denedim. Eğer rect1y

+1

Öyleyse, sorun, görüntünün yerleştirilmesinde, çarpışma algılayışınızdan çok olabilir. Resminizi (görünmez) dikdörtgeninize nasıl yerleştirirsiniz? – Jankapunkt

+0

Haklısınız, bu bir yerleşim meselesiydi. Resimlerin sol üst köşesi x ve y idi, ancak çarpışmada bu koordinatların merkezde olması sağlandı. Bunu şimdi yaptım: drawImage (img, x-width/2, y-height/2, width, height). teşekkür ederim –