Saya memiliki pengendali karakter dasar yang diatur untuk platformer 2D dengan Box2D, dan saya mulai men-tweak untuk mencoba membuatnya terasa enak. Mesin fisika memiliki banyak tombol untuk diubah, dan tidak jelas bagi saya, menulis dengan mesin fisika untuk pertama kalinya, mana yang harus saya gunakan. Haruskah melompat menerapkan kekuatan untuk beberapa kutu? Impuls? Atur kecepatan secara langsung? Bagaimana cara menghentikan avatar dari menempel ke dinding tanpa menghilangkan semua gesekannya (atau apakah saya menghilangkan semua gesekan, tetapi hanya di udara)? Haruskah saya memodelkan karakter sebagai kapsul? Sebuah kotak dengan sudut bulat? Sebuah kotak dengan dua roda? Hanya satu roda besar? Saya merasa seseorang pasti pernah melakukan ini sebelumnya!
Tampaknya ada sangat sedikit sumber daya yang tersedia di web yang bukan "fisika pertama bayi", yang semuanya memotong di mana saya berharap seseorang telah menyelesaikan masalah. Sebagian besar contoh mesin fisika untuk platformer memiliki kontrol perasaan ringan, atau lompatan di udara, atau perilaku yang mudah dieksploitasi ketika penetrasi sementara terlalu tinggi, dll.
Beberapa contoh yang saya maksud:
- Ketukan pendek melompat melompat jarak pendek; ketukan panjang melompat lebih tinggi.
- Penyaradan pendek saat berhenti atau membalikkan arah dengan kecepatan tinggi.
- Berdiri stabil di tanjakan (tapi mungkin meluncur ke bawah saat menunduk).
- Kecepatan analog saat menggunakan pengontrol analog.
- Semua hal lain yang memisahkan platformer yang baik dari platformer yang buruk.
- Berani saya sarankan, platform bergerak stabil?
Saya tidak benar-benar mencari "hei, lakukan ini." Jelas, hal yang benar untuk dilakukan adalah bergantung pada apa yang saya inginkan dalam permainan. Tapi saya berharap seseorang di suatu tempat telah melalui berbagai kemungkinan dan berkata "teknik baik A memang menonjolkan X dengan baik, teknik B baik Y, tetapi itu tidak bekerja dengan C", atau memiliki beberapa contoh yang berhasil di luar "jika (kunci = = spasi) character.impulse (0, 1) "
Jujur saya tidak berpikir menggunakan mesin fisika adalah pendekatan yang tepat untuk sesuatu dari domain ukuran itu dengan persyaratan super ketat.
Cukup tulis sendiri semuanya. Anda akan mendapatkan hasil yang lebih baik dengan mengatakan "pindahkan karakter ke atas dengan x unit dalam bentuk parabola ini ketika menahan tombol lompat untuk panjang y" daripada dengan memiliki banyak tombol untuk mengubah.
sumber
Saya menulis serangkaian artikel tentang membangun permainan platform dari bawah ke atas menggunakan teknologi modern dan itu termasuk bagaimana saya menangani fisika sederhana:
http://www.wildbunny.co.uk/blog/2011/12/14/how-to-make-a-2d-platform-game-part-2-collision-detection/
Namun jika Anda menginginkan sesuatu yang lebih berteknologi tinggi, sangat mungkin untuk melakukan pendekatan ini menggunakan mesin fisika penuh. Berikut adalah teknik yang dapat Anda gunakan (dari Little Big Planet) yang menjadikan karakter pemain bagian yang sepenuhnya terintegrasi dari mesin fisika:
Alih-alih menerapkan impuls atau mengatur kecepatan untuk memindahkan pemain sebagai 'input eksternal' ke mesin fisika, Anda dapat mengembangkan kendala yang mengontrol karakter.
Jadi batasan ini akan memiliki kecepatan dan arah yang diinginkan pemain sebagai input (dari permainan) dan akan memodelkan hal-hal seperti kekuatan dan kecepatan maksimum pemain. Batasan akan mencoba untuk menggerakkan pemain sesuai dengan inputnya (dan mematuhi maksimum), dan karena kendala itu akan menerapkan kekuatan yang sama dan berlawanan pada objek pemain berdiri, sehingga memungkinkan pemain untuk berdiri di atas platform yang bergerak dan untuk mempengaruhi hal-hal yang ia pindah.
Melakukan hal-hal seperti ini berarti Anda dapat membuat pemain benar-benar secara alami dapat menghadapi situasi seperti berada di bawah tumpukan besar kotak, atau melompat di beberapa platform yang bergerak karena ia sekarang menjadi bagian inti dari mesin fisika.
Semoga itu bisa membantu!
Salam, Paul.
sumber
Pertanyaan ini telah melihat diskusi yang signifikan di forum Box2D. Membaca diskusi tentang gerakan karakter, melompat, atau platformer dan Anda akan menemukan setiap masalah yang mungkin terjadi. Namun, masalah menjadi cukup rumit sehingga sistem penyaringan tabrakan diperbarui dan contoh Test Bed dibuat semata-mata untuk menunjukkan bagaimana itu harus dilakukan.
sumber