Bagaimana cara membuat deteksi tabrakan game RP-2D yang realistis?

9

Saya selalu ingin membuat Game RPG 2D kuno seperti Star Ocean, Final Fantasy, Sword of Mana dan bahkan seri “Tales of”, dan saya rasa banyak orang melakukannya. Tetapi bahkan sebelum menulis satu baris kode pun saya melakukan banyak riset, menggambar, dan uji coba.

Saya telah menemukan hampir semua jawaban untuk pertanyaan saya tetapi ada masalah yang belum dapat saya pecahkan: Bagaimana Anda membuat deteksi tabrakan yang realistis namun sederhana , seperti di game yang saya sebutkan sebelumnya?

Saya sudah tahu beberapa cara menghitung deteksi tabrakan, lihat contoh berikut:

Contoh deteksi tabrakan

Tidak ada yang memenuhi kebutuhan saya.

  • Tabrakan berbasis genteng terlalu sederhana dan lebih cocok untuk Zelda daripada Star Ocean. Plus, gambar setiap ubin perlu mengisi semua ruang agar terlihat realistis.
  • Pixel-perfect memiliki terlalu banyak kendala. Jika ubin Anda memiliki beberapa piksel di sana-sini, pemain kemungkinan besar akan terjebak di tengah-tengah dari mana (yaitu: dalam beberapa permainan Anda terjebak pada akar pohon lebar 2 piksel).
  • Dan topeng biner menggunakan terlalu banyak memori dan pengaturan imo.

Saya sudah membaca banyak dokumentasi tetapi saya tidak pernah menemukan sesuatu yang terlihat baik bagi saya. Dan semua ujicoba saya tidak terlihat dekat dengan apa yang saya mainkan. Jadi, jika Anda memiliki tautan atau tutorial yang bagus tentang cara kerja RPG 2D berevolusi, beri tahu saya.

Aymeric
sumber
2
Lingkungan apa yang Anda kembangkan karena topeng tumbukan mengambil terlalu banyak memori? Itu benar-benar bukan masalah bagi kebanyakan sistem modern, dan topeng tabrakan benar-benar terdengar seperti apa yang Anda cari.
Gregory Avery-Weir
Saya mengembangkan pada PC sebagian besar waktu dengan XNA, tetapi baru-baru ini saya telah berpikir untuk memulai proyek di WP7. Masalah yang saya miliki dengan topeng tabrakan adalah bahwa menggunakan resolusi kecil itu bertindak persis seperti pixel sempurna akan lakukan, dengan membuat karakter saya terjebak di sudut misalnya. Jadi, kecuali Anda menggunakan kurva Bézier untuk gerakan halus, Anda harus sangat berhati-hati tentang cara membuat topeng.
Aymeric

Jawaban:

9

N Tutorial dapat membantu di sini. Memang, mereka untuk platformer bergaya arcade, tetapi mereka juga akan bekerja dengan baik untuk tampilan RPG top-down; Hanya saja, jangan menerapkan gravitasi. Premis ini menguji tabrakan dalam kumpulan bentuk dasar - lingkaran, kotak pembatas sumbu-garis, garis, titik, dan sebagainya.

Anda kemudian entah bagaimana menghias dunia Anda dengan ini (mungkin melalui editor tingkat kustom), atau secara otomatis menghasilkan mereka (cocok dengan kotak atau lingkaran terdekat) - atau keduanya (default ke kotak / lingkaran yang dihasilkan secara otomatis, dan memungkinkan desainer untuk mengubah) .

Di tempat saya bekerja, kami telah melakukan beberapa platformer dan beberapa permainan eksplorasi top-down. Kami sudah melakukannya sejak masa GBA. Kami paling sering menggunakan AABB untuk karakter dan objek, yang dapat disetel dalam editor sprite - dan kami menjadi gila di sini, memungkinkan satu ton kotak per sprite, beberapa dengan tujuan yang berbeda. Kami mungkin memiliki:

  • satu atau lebih kotak tabrakan, menggambarkan bentuk objek untuk berlari ke dalam hal-hal;
  • mungkin banyak "kotak serangan" yang muncul ketika Anda berada di tengah serangan (dan menghidupkan dengan sprite), bahkan mungkin dua atau tiga per senjata, tergantung;
  • beberapa "kotak rentan" yang akan rusak ketika terkena kotak serangan orang lain - secara default, kami menggunakan kotak tumbukan, tetapi kotak rentan cenderung merasa lebih baik ketika mereka lebih kecil dari kotak tumbukan, dan kami dapat memungkinkan untuk kerusakan yang diketahui lokasi dengan cara ini
  • satu atau lebih "kotak aktivasi" pada AI yang menggambarkan wilayah akal untuk AI - mereka akan menyerang jika pemain berada di wilayah ini, misalnya.

Level-levelnya sebagian besar adalah string segmen garis; kami memiliki sedikit metadata per segmen untuk menggambarkan permukaan yang rusak atau licin, dll.

Jadi sebagian besar deteksi dan respons tabrakan menjadi AABB-vs-AABB atau AABB-vs-segmen. Kadang-kadang kita melemparkan lingkaran-vs-sesuatu untuk proyektil, walaupun sering kali AABB akan melakukannya di sini juga.

Anda tidak perlu banyak bentuk dasar untuk membuat hal-hal terlihat baik dan berperilaku baik - beberapa akan melakukannya, asalkan Anda dapat mengubah dan beralih pada mereka.


Juga, jangan merasa buruk tentang pencampuran sistem bersama; tabrakan berbasis ubin mungkin sangat baik di beberapa daerah (mewakili mayoritas dunia Anda) tetapi mengerikan untuk interaksi objek-objek. Tidak apa-apa; gunakan sistem yang berbeda untuk objek-vs-objek! Menulis untuk interaksi antara kedua sistem mungkin lebih mudah daripada yang Anda pikirkan.

Leander
sumber