Kapakları ve mesafeyi dikkate alarak hasara neden olacak 2d patlamalar nasıl uygulanır?


9

Bir 2D patlamayı, kasaların veya diğer kapakların arkasına saklanan karakterlere daha az zarar verecek şekilde nasıl uygulayabilirim? İdeal olarak hasar, kapağın gücüne bağlı olacaktır (örneğin, metal duvar ahşap sandıktan daha iyi koruyacaktır). İdeal olarak hasar mesafeyle de azalır.

Box2D fizik motorunun bir limanını kullanacağım - Farseer.

Teşekkür ederim.


1
Wiki ( goo.gl/c1OJx ), gerçek fiziksel süreçleri simüle ettiği için gerçekten anlamlı olabilecek parçacıklar kullanmanızı önerir. Böyle bir yaklaşımı düşünen var mı?
Den

Yanıtlar:


8

Bunu yapmanın nispeten basit bir yolu, patlamanın merkezinden DISTANCE(explosion,entity) < exlosion.max_radius(sözde kod) her varlığın merkezine bir ışın çizmektir .

Her varlık için, bu ışını takip edin ve gittiğinizde taban hasarını azaltın. Bir nesneyi vurduğunuzda hasar değerini kapaktan çıkartın (esas olarak ışını kısaltın).

Işın objeye çarptığında, kalan hasar ne olursa olsun patlama hasarınızdır.

Bu yaklaşım için, muhtemelen mesafe ile hızla azalan oldukça yüksek bir taban hasarı istiyorsunuz (mesafenin karesiyle ters orantılı olarak iyi yapmalıdır).


Diğer bir yaklaşım, işletmeyi tamamen içeren bir sektör çizmektir; ama daha geniş değil; ve tüm çıkış yolu .max_radius. Patlama ile işletme arasındaki herhangi bir teminatın kapsadığı alanın, teminat değeri ile çarpılarak bu sektörün alanından çıkarılması. Kalan alan patlama hasarınızdır.

Bunun düzgün bir yan etkisi, işletmenin patlamaya ne kadar yakın olması, sektörün o kadar genişlemesi ve daha fazla hasar almanızdır (sektörün tüm alanını saydığınızda ve sadece varlık ve patlama.

Örtüyü varlık olarak ele almak da yararlı olabilir; ve sadece daha yakın varlıklar tarafından alınan hasarları daha fazla olanlardan çıkarın, ama bu gnarly olabilir.


Kuşkusuz daha da zarif ve akıllı bir yaklaşım var, ama muhtemelen oldukça kötü bir hesap gerektiriyor. Her zaman olur.


0

Mesafe ile hasarın azaltılması basit bir görev olmalıdır. Patlamayı yarattığınızda, patlamanın merkezinin koordinatlarını bilmelisiniz. 2d'de çalıştığınız için sadece x ve y olacak.

Tek yapmanız gereken, Pythagoras teoremini kullanarak oyuncunun patlama merkezinin koordinatlarından uzaklıklarını hesaplamak ve ardından toplam hasarın yüzdesini hesaplamak için maksimum yarıçapa karşı kullanmaktır.

Örneğin, koordinatları (x1, y1) açıklamanın merkezi noktası ve (x2, y2) oynatıcının koordinatları olarak alın. Daha sonra alınan hasarı aşağıdaki gibi hesaplayabiliriz:

Distance from centre = sqrt((x2-x1 + (y2-y1)²)
Damage taken = (Distance from centre/Explosion radius) * max damage 

Yoldaki şeylere gelince, cevabı düşünmek için çok yorgunum, ama temelde patlamanın merkezinden oyuncuya doğru çizgi boyunca kavşaklar arıyor olacaksınız.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.