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) "