Gerçekçi bir 2D Rol Yapma oyunu çarpışma tespiti nasıl oluşturulur?


9

Her zaman Star Ocean, Final Fantasy, Mana Kılıcı ve hatta “Tales of” serisi gibi eski moda bir 2D Rol Yapma Oyunu oluşturmak istedim ve sanırım bir çok insan bunu yapıyor. Ancak tek bir kod satırı bile yazmadan önce birçok araştırma, çizim ve deneme yaptım.

Sorularıma neredeyse tüm cevapları buldum, ancak çözemediğim bir sorun var: Daha önce adlandırdığım oyunlarda olduğu gibi gerçekçi ama basit bir çarpışma tespiti nasıl yaratıyorsunuz ?

Çarpışma algılamayı hesaplamanın birkaç yolunu zaten biliyorum, aşağıdaki örneklere bakın:

Çarpışma tespit örnekleri

Bunların hiçbiri ihtiyaçlarımı karşılamıyor.

  • Çini tabanlı çarpışmalar çok basittir ve bir Yıldız Okyanusundan daha fazla Zelda'ya uygundur. Ayrıca, gerçekçi görünmek için her döşemenin çiziminin tüm alanı doldurması gerekir.
  • Pixel-perfect'in çok fazla kısıtlaması var. Döşemenizin burada ve orada bir pikseli varsa, oyuncu büyük olasılıkla hiçbir yerin ortasında sıkışır (yani: bazı oyunlarda 2 piksel genişliğinde ağaç köküne yapışırsınız).
  • Ve ikili maskeler çok fazla bellek ve ayarlar imo kullanır.

Belgeleri bir çok okudum ama bana iyi görünen bir şey bulamadım. Ve bütün denemelerim eskiden oynadığım şeye yakın değildi. Bu nedenle, 2D RPG'nin nasıl çalıştığı hakkında iyi bağlantılarınız veya eğiticileriniz varsa lütfen bana bildirin.


2
Çarpışma maskelerinin çok fazla hafıza alması için hangi ortamı geliştiriyorsunuz? Bu, çoğu modern sistem için gerçekten bir endişe değildir ve çarpışma maskeleri gerçekten aradığınız gibi ses çıkarır.
Gregory Avery-Weir

Çoğu zaman XNA ile PC'de geliştiriyorum, ancak son zamanlarda WP7'de bir proje başlatmayı düşünüyorum. Çarpışma maskeleriyle ilgili sorunum, karakterinizin örneğin bir köşeye sıkışmasını sağlayarak tam olarak piksel mükemmelliğinde olduğu gibi küçük bir çözünürlük kullanmasıydı. Bu nedenle yumuşak hareket için Bézier eğrisini kullanmadığınız sürece maskeyi nasıl oluşturduğunuza çok dikkat etmelisiniz.
Aymeric

Yanıtlar:


9

N Tutorials burada yardımcı olabilir. Kuşkusuz, onlar arcade tarzı bir platform için ama yukarıdan aşağıya görünüm RPG için de iyi çalışır; sadece yerçekimi uygulama. Öncül, temel şekiller - çemberler, eksene hizalanmış sınırlayıcı kutular, çizgiler, noktalar, vb.

Daha sonra bir şekilde dünyanızı bunlarla süsleyebilirsiniz (belki de özel bir seviye düzenleyicisi aracılığıyla) veya bunları otomatik olarak (en yakın kutuya veya daireye sığdırın) - veya her ikisine (otomatik olarak oluşturulan kutu / daireye varsayılan olarak izin verir ve bir tasarımcının ayarlamasına izin verirsiniz) .

Çalıştığım yerde birkaç platform oyunu ve yukarıdan aşağıya keşif oyunları yaptık. Bunları GBA günlerinden beri yapıyoruz. Çoğu zaman bir sprite editöründe ayarlanabilen karakterler ve nesneler için AABB'leri kullanırız ve burada çıldırırız, bazıları farklı amaçlarla sprite başına bir ton kutuya izin veririz. Sahip olabiliriz:

  • nesnenin bir şeylere kaçması için şeklini tanımlayan bir veya daha fazla çarpışma kutusu;
  • muhtemelen bir saldırı ortasındayken (ve hareketli grafikle canlandırdığınızda), belki de silah başına iki veya üç hatta bağlı olarak ortaya çıkan birçok “saldırı kutusu”;
  • başkalarının saldırı kutularına çarptığında hasar alacak birkaç "savunmasız kutu" - varsayılan olarak, çarpışma kutusunu kullanıyoruz, ancak savunmasız kutular çarpışma kutusundan daha küçük olduklarında kendilerini daha iyi hissetme eğilimindeler ve izin verebiliriz bu şekilde konum farkında hasar için
  • AI için algılama bölgesini tanımlayan bir veya daha fazla "aktivasyon kutusu" - örneğin oyuncu bu bölgede ise saldırırlar.

Seviyeler çoğunlukla çizgi segmentlerinin dizeleridir; zararlı veya kaygan yüzeyleri vb. tanımlamak için segment başına biraz meta verimiz var.

Böylece çarpışma algılama ve tepkilerinin çoğu AABB-A-AABB veya AABB-vs-segment olur. Bazen bir mermi için bir çembere karşı bir şey fırlatırız, ancak çoğu zaman bir AABB burada da yapacak.

İşlerin iyi görünmesini ve iyi davranmasını sağlamak için çok fazla temel şekle ihtiyacınız yoktur - bunlarda ince ayar yapabilmeniz ve yineleyebilmeniz koşuluyla, bir kaç şey olacaktır.


Ayrıca, harmanlama sistemlerini birlikte hissetme konusunda üzülmeyin; kiremit tabanlı çarpışma bazı bölgelerde (dünyanızın çoğunu temsil eder) mükemmel olabilir, ancak nesne-nesne etkileşimleri için korkunç olabilir. Bu iyi; nesne-nesne-için farklı bir sistem kullanın! İki sistem arasındaki etkileşimler için yazmak düşündüğünüzden daha kolay olabilir.

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.