Platform dan Fisika
Kasing tepi ini banyak. Gim platform yang menyenangkan tidak berperilaku dengan cara yang akurat secara fisik, dan kontrol dan perilaku yang diharapkan pemain setelah bertahun-tahun gim platformer "sempurna" seperti Mario sangat sulit diimplementasikan dengan teknik umum seperti yang Anda dapatkan dengan Box2D atau mesin fisika lainnya. Kebanyakan platformer yang baik tidak menggunakan segala jenis fisika generik atau respons tabrakan di pengontrol pemain mereka.
Hasilkan Hulls
Mengenai pertanyaan spesifik Anda, solusi terbaik adalah berhenti menggunakan kotak sebagai alasan Anda. Gunakan serangkaian segmen garis yang terhubung (lambung). Itu memungkinkan mesin pendeteksi benturan hanya fokus pada permukaan yang sebenarnya bisa dilalui dan tidak melihat tepi "palsu" yang ada antara AB dan BC. Itulah yang dilakukan Box2D. Bentuknya digunakan untuk menghasilkan permukaan luar, yang dihubungkan bersama untuk membentuk lambung.
Anda memerlukan ini bahkan dalam permainan berbasis ubin, atau dalam situasi di mana Anda memiliki dua objek AABB di samping yang lain bertindak sebagai lantai. Mesin tabrakan akan mengambil tepi-tepi vertikal dan menyebabkan pemain menangkapnya. Ada retas yang bisa membantu, tetapi tidak menghilangkan masalah. Solusinya adalah dengan hanya memiliki segmen garis tunggal yang mewakili permukaan daripada kotak 2D penuh.
Anda dapat membuat lambung dalam wadah generik dengan memotong poligon satu sama lain dan menggabungkan titik klip ke daftar tepi.
Permukaan Miring
Karena contoh Anda termasuk kemiringan dan Anda menyebutkan restitusi dan properti fisik lainnya, saya akan menunjukkan beberapa masalah lain yang akan segera Anda perhatikan, yang selanjutnya menggambarkan mengapa deteksi dan respons tabrakan generik tidak bekerja dengan baik untuk platformer. Pertama, coba berdiri di platform miring, melompat ke atas, lalu mendarat. Anda mungkin akan melihat bahwa karakter akan "meluncur" sedikit ketika mendarat. Masalahnya adalah kontak normal yang Anda hasilkan biasanya akan menunjuk keluar dari permukaan miring. Kemudian, ketika menyelesaikan tabrakan, pemain didorong ke arah itu. Meskipun karakter itu jatuh lurus ke bawah, dia akan didorong ke atas dan sedikit ke kanan saat mendarat, menghasilkan slide. Ini dapat diretas dengan mempertimbangkan kecepatan relatif ke dalam akun,
Masalah kedua yang akan Anda perhatikan, yang jauh lebih sulit untuk diperbaiki, adalah apa yang terjadi ketika Anda mencoba berlari cepat menuruni jalan. Pemain akan "melompat" menuruni jalan. Ini sangat terlihat bahkan di sebagian besar game AAA saat ini. Itu tidak hanya terlihat konyol, tetapi jika permainan Anda mengharuskan pemain untuk menginjakkan kaki di tanah untuk melompat, itu membuat sulit untuk berlari menuruni jalan dan melompat setengah jalan, karena pemain hanya menghubungi jalan selama sebagian kecil dari waktu yang dihabiskan turun itu. Perbaikan yang lebih sederhana adalah dengan hanya melakukan beberapa sinar gips ketika pemain bergerak, dan pasang posisi pemain ke permukaan terdekat (jika sangat dekat dengan pemain) jika pemain tidak melompat dan sebelumnya di tanah.
Anda juga dapat menemukan bahwa pemain meluncur ke udara ketika berlari menanjak jika Anda mencoba memodelkan kecepatan, gesekan, dan pengembalian pada pemain seolah-olah ia adalah tubuh kaku yang normal. Gerakan pemain harus dibatasi pada gerakan horizontal kecuali jatuh / melompat. Tentu saja, jika Anda bermain platformer zaman keemasan yang lebih tua, Anda mungkin memperhatikan bahwa kecepatan horizontal pemain seringkali konstan antara permukaan horizontal dan miring. Ini perlu diperhitungkan saat berjalan naik / turun lereng juga.
Akan ada sejumlah kasus sudut aneh lainnya yang pada akhirnya akan Anda temui juga. Jika Anda mencoba membuat platformer yang baik, yang terbaik adalah mengimplementasikan pengontrol pemain platformer yang terpisah dari fisika dan hardcode gerakan dan perilaku kontrol yang Anda inginkan, daripada mengandalkan fisika generik dan algoritma respons tabrakan.