Saya memiliki masalah dengan resolusi tabrakan AABB.
Saya menyelesaikan persimpangan AABB dengan menyelesaikan sumbu X terlebih dahulu, lalu sumbu Y. Ini dilakukan untuk mencegah bug ini: http://i.stack.imgur.com/NLg4j.png
Metode saat ini berfungsi dengan baik ketika suatu benda bergerak ke pemain dan pemain harus didorong secara horizontal. Seperti yang dapat Anda lihat di .gif, paku horizontal mendorong pemain dengan benar.
Ketika paku vertikal bergerak ke pemain, bagaimanapun, sumbu X masih diselesaikan terlebih dahulu. Ini membuat "menggunakan paku sebagai tumpangan" tidak mungkin.
Ketika pemain bergerak ke paku vertikal (dipengaruhi oleh gravitasi, jatuh ke dalamnya), dia mendorong sumbu Y, karena tidak ada tumpang tindih pada sumbu X untuk memulai.
Sesuatu yang saya coba adalah metode yang dijelaskan dalam jawaban pertama tautan ini: Deteksi tabrakan objek persegi panjang 2D
Namun paku dan objek bergerak bergerak dengan mengubah posisi, bukan kecepatan, dan saya tidak menghitung posisi prediksi berikutnya hingga metode Pembaruan () mereka dipanggil. Tak perlu dikatakan solusi ini juga tidak berhasil. :(
Saya perlu memecahkan tabrakan AABB dengan cara yang kedua kasus yang dijelaskan di atas berfungsi sebagaimana dimaksud.
Ini adalah kode sumber tabrakan saya saat ini: http://pastebin.com/MiCi3nA1
Saya akan sangat berterima kasih jika seseorang dapat melihat ini, karena bug ini telah ada di mesin sejak awal, dan saya telah berjuang untuk menemukan solusi yang baik, tanpa hasil. Ini serius membuat saya menghabiskan malam melihat kode tabrakan dan mencegah saya untuk sampai ke "bagian yang menyenangkan" dan coding logika permainan :(
Saya mencoba menerapkan sistem tabrakan yang sama seperti pada demo platformer AppHub XNA (dengan menyalin-menempelkan sebagian besar barang). Namun bug "jumping" muncul di gim saya, sementara itu tidak muncul di demo AppHub. [bug melompat: http://i.stack.imgur.com/NLg4j.png ]
Untuk melompat saya memeriksa apakah pemain "onGround", lalu tambahkan -5 ke Velocity.Y.
Karena Velocity.X pemain lebih tinggi dari Velocity.Y (lihat panel keempat dalam diagram), onGround diatur ke true ketika seharusnya tidak, dan dengan demikian memungkinkan pemain melompat di udara.
Saya percaya ini tidak terjadi dalam demo AppHub karena Velocity.X pemain tidak akan pernah lebih tinggi dari Velocity.Y, tapi saya mungkin salah.
Saya memecahkan ini sebelumnya dengan menyelesaikan pada sumbu X terlebih dahulu, kemudian pada sumbu Y. Tapi itu mengacaukan tabrakan dengan paku seperti yang saya sebutkan di atas.