Saya sedang memeriksa tabrakan untuk karakter platformer seperti yang ditunjukkan pada # 1. Titik-titik merah adalah piksel yang diperiksa dan garis abu-abu menunjukkan sumbu yang berkaitan dengannya. Saya suka hasil yang saya dapatkan dari memeriksa tabrakan dengan cara ini (dibandingkan, katakanlah, kotak pembatas). Semuanya bekerja persis seperti yang saya suka kecuali untuk satu masalah: deteksi crush.
Dalam gambar-gambar berikut, kotak biru muda mewakili tanah, kotak oranye adalah objek, dan panah menunjukkan arah gerakan.
Solusi sederhana untuk mendeteksi ketika pemain dihancurkan adalah untuk melihat apakah titik tabrakan di sisi yang berlawanan keduanya memicu. Jika ya, pemain dihancurkan. Di # 2, Anda dapat melihat skenario naksir normal. Pemain di-ground dan titik tabrakan atas berpotongan dengan objek yang jatuh. Ini memicu naksir.
# 3, 4, dan 5 menyajikan skenario bermasalah. Di # 3, pemain bergerak ke arah objek, yang bergerak ke atas. Titik tabrakan sisi kanan mengenai benda, menyebabkan tabrakan dan menghentikan pemain.
Sekarang, jika objek terus bergerak ke atas dan pemain terus bergerak ke kanan (seperti yang ditunjukkan pada # 4), objek membersihkan titik tumbukan sisi kanan pemain dan pemain bergerak ke kanan. Tapi sekarang, setelah melakukannya, objek memotong titik tumbukan atas yang menyebabkan naksir vertikal yang tidak diinginkan.
Skenario serupa ditunjukkan pada # 5. Dua objek terpisah cukup jauh untuk titik tumbukan bawah untuk membersihkan, memungkinkan pemain untuk jatuh, tetapi tidak sampai sejauh untuk memungkinkan titik tumbukan samping untuk membersihkan, menyebabkan himpitan horizontal yang tidak diinginkan.
Saya telah memeras otak saya pada solusi, tetapi tidak ada yang saya hasilkan telah bekerja dengan sangat baik, jadi saya bertanya-tanya apakah ada orang di luar sana yang memiliki ide atau wawasan tentang bagaimana menyelesaikan masalah ini.
Untuk menjernihkan kebingungan, titik tumbukan merah akan berada dalam sprite dan garis abu-abu hanya digunakan untuk menunjukkan sumbu yang relevan untuk setiap titik tumbukan. Misalnya, jika sprite karakter adalah kotak hijau sederhana, titik-titik tumbukan akan terlihat seperti ini: