Oke, jadi ini adalah masalah yang saya coba cari beberapa waktu. Mine adalah gim platformer 2D dengan dunia yang terdiri dari (biasanya) ubin bergerak dan sprite seluler, keduanya menggunakan AABBs untuk mewakili hitbox mereka. Game ini BUKAN berbasis grid karena beberapa komplikasi dengan memindahkan lapisan ubin.
Saya dapat mendeteksi tabrakan dan dengan mudah mengetahui kedalaman tabrakan. Saya menggunakan "metode poros dangkal" untuk menentukan cara untuk menyelesaikan tabrakan antara sprite dan ubin. Jika sprite lebih dalam secara horizontal daripada vertikal, arah penyelesaiannya adalah naik atau turun. Jika sprite lebih dalam secara vertikal daripada horizontal, arah penyelesaiannya adalah kiri atau kanan.
Ini cukup sederhana, dan itu bekerja dengan cukup baik. Yaitu, sampai Anda memiliki sprite bertabrakan dengan lebih dari satu ubin. Karena, menurut sifatnya, setiap tabrakan harus diperiksa secara terpisah, tabrakan yang berbeda mungkin memiliki arah yang berbeda untuk diselesaikan. Sebagai contoh, jika sprite mencoba berjalan melintasi deretan ubin, untuk satu bingkai mereka akan memotong ubin berikutnya seperti bahwa kedalaman horizontal lebih pendek daripada kedalaman vertikal. Ketika tabrakan mengatakan "tekad ke kiri", itu akan didorong kembali dan akan macet di sudut.
Saya telah merenungkan masalah ini berulang-ulang, untuk beberapa waktu, dan beberapa solusi telah datang kepada saya, tetapi semua memiliki kekurangan. Saya bisa menandai sisi-sisi tertentu sebagai tidak terjangkau, tetapi tanpa mesin berbasis grid, menentukan "tidak terjangkau" sangat rumit, terutama dengan memindahkan lapisan ubin selalu menjadi suatu kemungkinan.
Metode lain yang mungkin adalah memprediksi tumbukan sebelum terjadi dan "mengembalikan" gerakan ke titik tumbukan, saya kira, tapi saya tidak yakin bagaimana perhitungannya.
Saya merasa bahwa saya kehilangan sesuatu yang sangat jelas, terutama karena permainan dari tahun 80an telah menyelesaikan masalah ini.