İyi 2D Platformer Fiziği [kapalı]


76

Box2D ile 2D platform için ayarlanmış bir temel karakter denetleyicisine sahibim ve iyi hissetmek için ince ayar yapmaya başladım. Fizik motorlarının ince ayar yapmak için çok fazla düğmesi var ve benim için kullanmam gereken ilk şey, bir fizik motoru ile yazdığım bana göre net değil. Atlama birkaç keneler için bir kuvvet uygulamalı mıdır? Bir dürtü? Doğrudan ayarlanan hız? Avatarın sürtünmesini ortadan kaldırmadan duvarlara yapışmasını nasıl durdurabilirim (veya tüm sürtünmeyi ortadan kaldırabilirim, ancak yalnızca havada)? Karakteri kapsül olarak mı modellemeliyim? Köşeleri yuvarlatılmış bir kutu? İki tekerlekli bir kutu? Sadece bir büyük tekerlek? Bunu daha önce birinin yapmış olması gerektiğini düşünüyorum.

İnternette "bebeğin ilk fiziği" olmayan, çok azının birisinin sorunları çözmeyi umduğum yeri kestiği çok az kaynak var gibi görünüyor. Platformcular için fizik motoru örneklerinin çoğu, geçici penetrasyonun çok yüksek olduğu durumlarda, floaty hissi kontrollerine veya havada atlamalara veya kolayca sömürülebilir davranışa sahiptir.

Ne demek istediğime dair bazı örnekler:

  • Atlama kısa bir musluk kısa bir mesafe atlar; uzun bir musluk daha yüksek atlar.
  • Yüksek hızda yönleri durdururken veya geri döndürürken kısa kayma.
  • Yokuşta sabit durmak (ama ördek atarken onları aşağı doğru kaydırmak).
  • Analog kontrol cihazı kullanırken analog hız.
  • İyi platformları kötü platformlardan ayıran diğer tüm şeyler.
  • Cesaretli hareketli platformlar öneririm.

Gerçekten "hey, bunu yap" ı aramıyorum. Açıkçası, yapılacak doğru şey oyunda istediklerime bağlı. Ancak, bir yerlerin birinin birinden olasılıklar geçirdiğini ve "iyi teknik A'nın X'i iyi, teknik B'nin Y'yi iyi yaptığını, ancak bunun C ile çalışmadığını" veya "ötesinde çalışmış bazı örnekleri olduğunu" söylediğini umuyorum. = boşluk) character.impulse (0, 1) "

Yanıtlar:



25

Gerçek bir fizik motoru kullanarak “Mario benzeri” bir fizik uygulamak oldukça zor.

Bunu son denediğimde, Chipmunk'i kullanarak, oyuncuyu 2 daire olarak modelledim - bir 'ayak dairesi' üstünde bir 'vücut dairesi'

'Ayak dairesi' bir miktar sürtünme geçirdi, zıplamadı ve oldukça küçüktü. 'Vücut dairesi', duvarlara / dik eğimlere yapışmayı önlemek için daha büyük ve sürtünmesizdi.

Nesne, rotasyona izin vermeyecek şekilde sınırlandırılmıştır - sadece kayar

'Ayaklar' bir şeye dokunuyorsa veya son birkaç karenin içindeyse (eğimlerin düşmesine izin vermek için), oyuncu yerdeymiş gibi düşünüldü (normal bir yüzey kontrolü yapmış olabilir)

Bir süredir koda baktım, ancak davranış çizgileri boyunca:

Yerdeyken:

  • 'Ek yerçekimi' uygulayın (yokuş aşağı koşmaya yardımcı olmak için aşağı doğru kuvvet)
  • Zemin sürtünmesi uygulayın (daha fazla miktarda yatay sönümleme)
  • Kontrollere göre, sol / sağ hareket kuvveti uygulayın.
  • (Maksimum çalışma hızına yaklaşırken sol / sağ hareket kuvvetini küçültün)
  • Atlama basılırsa, yukarı doğru itme uygulayın

Havadayken:

  • Hava direnci uygulayın (az miktarda yatay sönümleme)
  • Düzenli (veya azaltılmış) yerçekimi uygulayın
  • Havada kontrole izin veriyorsanız, sol / sağ hareket kuvveti uygulayın

İki eyalet arasında geçiş yaparken biraz dikkatli olmalısınız - bir yokuş aşağı koşarken, birkaç kare için zeminden ayrılabileceğinizi unutmayın - muhtemelen bu noktada durumları değiştirmek / atlamak istemezsiniz.

Dikkat etmeniz gereken birkaç şey daha olsa da ... 'atlama' platformlarının uygulanması zor olabilir ve eğlenceli şeyler yapmaya başladığınızda (hareketli platformlar, dönen dünyalar, vb.), Dikkatli olmalısınız Müzikçaların, herhangi bir 'animasyonlu' hareketli nesne tarafından yakalanamadığından / ezilmediğinden emin olun.


Bunun oldukça eski bir cevap olduğunu biliyorum ama bu konuda bazı sorularım var. 1) “Bulunduğunuz arazi eğimi ne olursa olsun aynı hızı koruyarak” nasıl çözersiniz? 2) Ayaklar için küçük bir daire ve vücut için daha büyük bir daire kullanıyorsanız, oyuncu bir süre kenarlarına asılmaz mı? Yaklaşımınızla gerçekten ilgileniyorum.
Notbad

18

Dürüst olmak gerekirse, bir fizik motoru kullanmanın, bu büyüklük alanı için süper katı gereksinimleri olan bir şey için doğru yaklaşım olduğunu düşünmüyorum.

Sadece kendin yaz. "Y uzunluğu boyunca atlama düğmesini basılı tutarken karakteri bu parabol biçiminde x birimleriyle yukarı taşı" diyerek çok daha iyi sonuçlar elde edeceksiniz.


Bunu geçmişte birkaç kez yaptım. Bir noktaya kadar işe yarıyor, ancak her zaman başka bir şeyi atıyorsunuz çünkü fiziği kesmeksizin bir denetleyiciyle doğru yapmak çok zor. Bu özel oyunda, oyuncunun hareketi için bazı bahar / ip mekaniklerini dahil etmeyi umuyorum ve bu bir kutu kırmayı tercih etmek yerine "Gerçek bir fizik motorunu kesmeyi tercih ederim" yerine geçti. taşıyıcı".

3
Bir kutu taşıyıcıyı kesmeyi tercih ederim, en azından kararsız olamaz, oysa fizik motoru patlamaya meyillidir, çünkü harekete kesin özellikleri uygulamak için hareketleri kısıtlamanız gerekir (ve fizik motoru kısıtlamaları değil). sert, ancak çok uymaya çalışabilirler). Ayrıca, istenmeyen bir sorunu çözmek için güç uygulamak, diğer her şeyi etkileme eğilimindedir, bu da cehennem cehenneme yol açar.
Kaj

10

Modern teknolojiler kullanarak sıfırdan bir platform oyunu kurma hakkında bir dizi makale yazdım ve basit fiziği nasıl idare ettiğimi de içeriyor:

http://www.wildbunny.co.uk/blog/2011/12/14/how-to-make-a-2d-platform-game-part-2-collision-detection/

Ancak, daha yüksek teknolojiye sahip bir şey istiyorsanız, tam bir fizik motoru kullanarak buna yaklaşmak tamamen mümkün. İşte oyuncu karakterini fizik motorunun tamamen entegre bir parçası yapan (Küçük Büyük Gezegenden) kullanabileceğiniz bir teknik:

Oynatıcıyı fizik motoruna 'harici girişler' olarak hareket ettirmek için darbeler uygulamak veya hızları ayarlamak yerine, karakteri kontrol eden bir kısıtlama geliştirebilirsiniz.

Dolayısıyla bu kısıtlama, oyuncunun bir girdi olarak istediği hıza ve yöne sahip olacaktır (oyundan) ve oyuncunun maksimum gücü ve hızı gibi şeyleri modelleyecektir. Kısıtlama, oynatıcıyı girdilerine göre hareket ettirmeye çalışacaktır (ve maksimum değerlere uymalıdır) ve kısıtlama nedeniyle oynatıcının üzerinde durduğu nesneye eşit ve zıt bir kuvvet uygulayarak oyuncunun hareketli platformlarda durmasına izin verecektir. ve üzerinde hareket ettiği şeyleri etkilemek için.

Bunun gibi şeyler yapmak, oyuncunun tamamen devasa bir kutu destesinin altına düşme veya birkaç hareketli platformda zıplama gibi durumlarla başa çıkabilmesi anlamına gelebilir, çünkü şu anda fizik motorunun temel bir parçasıdır.

Umarım yardımcı olur!

Şerefe Paul.


6

Bu soru Box2D forumlarında önemli tartışmalar yaptı. Karakter hareketi, atlama veya platform hakkında tartışmalar olsa da, olası her konuyu göreceksiniz. Bununla birlikte, sorun çarpışma filtreleme sisteminin güncellenmesi ve yalnızca nasıl yapılması gerektiğini göstermek için bir Test Bed örneği oluşturulacak şekilde karmaşıklaştı.

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.