Saat ini, saya memiliki platformer dengan ubin untuk medan (gambar dipinjam dari Cave Story). Game ini ditulis dari awal menggunakan XNA, jadi saya tidak menggunakan mesin atau mesin fisika yang ada.
Tabrakan ubin dijelaskan persis seperti yang dijelaskan dalam jawaban ini (dengan SAT sederhana untuk persegi panjang dan lingkaran), dan semuanya berfungsi dengan baik.
Kecuali ketika pemain berlari ke dinding saat jatuh / melompat. Dalam hal ini, mereka akan menangkap ubin dan mulai berpikir mereka telah menyentuh lantai atau langit-langit yang sebenarnya tidak ada.
Dalam tangkapan layar ini, pemain bergerak ke kanan dan jatuh ke bawah. Jadi setelah gerakan, tabrakan diperiksa - dan pertama, ternyata karakter pemain bertabrakan dengan ubin ke-3 dari lantai, dan didorong ke atas. Kedua, dia ditemukan bertabrakan dengan ubin di sampingnya, dan mendorong ke samping - hasil akhirnya adalah karakter pemain berpikir dia ada di tanah dan tidak jatuh, dan 'menangkap' di ubin selama dia berlari ke dalamnya .
Saya bisa menyelesaikan ini dengan mendefinisikan ubin dari atas ke bawah sebagai gantinya, yang membuatnya jatuh dengan lancar, tetapi kemudian kasus terbalik terjadi dan dia akan mengenai langit-langit yang tidak ada di sana ketika melompat ke atas ke dinding.
Bagaimana saya harus mendekati menyelesaikan ini, sehingga karakter pemain bisa saja jatuh di dinding seperti yang seharusnya?