Saya ingin membuat platformer run-jump style isometrik. Pemain harus dapat melompat di atas platform di atas lantai, mengenai sisi benda dll.
Saya akan menggunakan mesin game 2D jadi saya tidak ingin meniru tabrakan 3D penuh untuk dimensi yang tidak saya gunakan.
Saya berpikir objek dalam permainan harus ditempatkan menggunakan: X, Y, lebar, tinggi, dan Z untuk kedalaman.
Dengan menggunakan nilai-nilai itu, bagaimana saya harus mendeteksi tabrakan?
collision-detection
isometric
Jdeseno
sumber
sumber
Jawaban:
2 pilihan:
Anda bisa memperlakukannya sebagai game 3D dengan kamera ortografi tetap. Kemudian Anda dapat menggunakan sumber daya / buku / tutorial / perpustakaan game 3D standar. Bahkan jika itu diberikan dalam 2D dengan sprite, matematika untuk pergerakan dll akan tetap 3D di belakang layar. Ini akan memberi Anda hasil yang paling akurat.
Anda bisa memperlakukannya sebagai game 2D top-down, dengan properti tinggi tambahan. Misalnya, bayangkan kisi 2D di mana setiap ubin memiliki nilai ketinggian. Saat berpindah dari satu ubin ke ubin lain, Anda hanya membiarkan karakter lewat ke ubin tertentu jika kaki karakter berada di atas atau sama dengan ketinggian ubin itu, tetapi jika mereka melompat dan gravitasi membawa mereka turun di atas ubin, Anda biarkan mereka tetap di sana. Dengan sedikit kerja Anda bisa membuatnya sehingga Anda bisa berjalan di bawah jembatan dll.
sumber
Ada banyak cara untuk menyederhanakan ini. Misalnya, jika Anda tidak mengizinkan lapisan (misalnya, jembatan yang bisa Anda lewati dan lewati, Anda bisa melakukan semua pendeteksian tabrakan dalam dimensi X / Y, tempat Anda memfilter set tabrakan ke ketinggian + kedalaman apa pun) atau lebih tinggi.
sumber
Jika gim ini didasarkan pada kisi persegi, maka kisi ini mendefinisikan sumbu X / Y Anda. Dan Z dapat digunakan untuk ketinggian.
Tumbukan kemudian semudah atau semudah gim berbasis 2D lainnya.
Maka Anda hanya perlu mengkonversi dari grid kembali ke koordinat layar isometrik untuk rendering. Ini cukup mudah - tetapi Anda mungkin perlu berpikir tentang menghitung nilai 'kedalaman', untuk tujuan penyortiran (rendering adegan isometrik dari belakang ke depan)
sumber
Googling sekitar saya menemukan demo ini: http://planetskill.com/iso/
Ini hanya mengimplementasikan tabrakan dengan sumbu atas / bawah tetapi menambahkan tabrakan lainnya harus mudah:
Jika posisi naik / turun dari langkah berikutnya lebih tinggi dari maks Anda, jangan bergerak. Ini juga memungkinkan Anda menerapkan lompatan dengan cara yang mudah.
Kode contoh di sini: http://gist.github.com/478997
sumber
Semua yang di atas. Isometrik hanyalah grid 2d yang dicukur jadi perlakukan itu sebagai tilemap 2d dan pikirkan cara untuk menyandikan kedalaman. Bagaimana Anda melakukannya dalam permainan 2d biasa (bisa pergi di belakang atau di depan blok ketika 'melompat'? Anda akan menyimpan kedalaman per ubin (buffer kedalaman-> z buffer) atau Anda akan menggunakan beberapa layer , atau, jika Anda ingin lebih keren, Anda akan menerapkan panggilan balik per jenis huruf (atau pemetaan) dan akan dapat melakukan apa pun yang Anda inginkan, memeriksa kedalaman, memeriksa peralatan, memutar warp player, meminta pemain perlahan-lahan naik, memformat HD.
sumber
Yah Anda bisa memiliki layer tabrakan terpisah di atas level Anda yang tidak terlihat dan menggunakannya untuk memeriksa tabrakan .. Anda juga dapat menggunakan ini untuk beberapa layer selama Anda tahu di lapisan mana pemainnya;)
sumber