Apakah saya akan menyesal menggunakan sistem pendeteksian tabrakan berbasis warna?

7

Saya baru saja mulai membangun game pertama saya dengan XNA (saya sudah berpengalaman dengan C # tetapi tidak game).

Saya sedang membangun penembak 2d top down cukup sederhana. Saya membaca tutorial ini tentang menggunakan sistem tabrakan berbasis warna dan itu terdengar sangat keren bagi saya. http://www.xnadevelopment.com/tutorials/theroadnottaken/theroadnottaken.shtml

Ini berarti saya dapat dengan cepat membuat level hanya menggunakan program grafik apa pun dan tidak harus menentukan pemandangan saya (dinding, pohon dll) dalam hal kotak tabrakan dll kan?

Namun saya dapat melihat bahwa turun jalan ini berarti bahwa mungkin perhitungan untuk menentukan apakah benda yang bergerak cepat seperti peluru berpotongan dinding dll menjadi lebih sulit berpotensi karena Anda tidak dapat melakukan calcs jenis persimpangan geometri dasar.

Apakah itu benar? Apakah saya akan menyesal pergi ke arah ini jika permainan saya semakin kompleks dari waktu ke waktu? Layak hanya berinvestasi dalam pembuatan editor tingkat untuk menentukan pemandangan saya dalam hal geometri?

Setiap saran untuk noob sangat dihargai!

TerryB
sumber

Jawaban:

6

Anda tepat dengan pengamatan Anda mengenai kemampuan pendekatan tabrakan berbasis bitmap.

Metode ini menyediakan cara yang sangat mudah untuk mengedit level Anda dengan program apa pun yang dapat menampilkan bitmap (program pengeditan gambar apa pun). Sistem ini juga sangat fleksibel ketika Anda ingin mendefinisikan berbagai jenis tanah. Katakanlah greenuntuk lumpur, dan reduntuk bawah tanah yang solid. Anda kemudian dengan mudah menanyakan piksel saat ini dan menentukan jenis bawah tanah tempat pemain berdiri. Bahkan ramp (gradien dari tipe tanah A ke B) dimungkinkan tanpa banyak masalah.

Masalah muncul dengan deteksi tabrakan. Mudah untuk mendeteksi persimpangan dengan objek lain (cukup lakukan tes pixel), tetapi sulit (mahal secara komputasi) untuk mengetahui orientasi objek yang Anda temui. Ini sangat penting ketika Anda membutuhkan permukaan normal untuk membelokkan objek dengan benar .

Juga objek yang bergerak sangat cepat dapat menjadi masalah, terutama jika Anda memiliki objek tipis (mis. 1 pixel lebar) untuk bertabrakan. Sudah ada pertanyaan yang membahas topik ini.

Pada akhirnya itu semua tergantung pada jenis permainan yang ingin Anda buat dan resolusi apa (dalam hal deteksi / penyelesaian tabrakan) yang Anda butuhkan. Pendekatan berbasis bitmap bekerja paling baik, ketika sebagian besar dunia Anda statis. Tetapi juga memungkinkan Anda untuk mengimplementasikan hal-hal seperti level yang dapat dirusak dengan cukup mudah.

Karena Anda tidak menyebutkan jenis permainan yang ingin Anda buat, sekarang terserah Anda untuk memutuskan apakah pendekatan tabrakan berbasis bitmap akan bermanfaat bagi permainan Anda. Semoga berhasil.

bummzack
sumber
Dalam pengalaman saya, masalah normal permukaan cukup sepele dibandingkan dengan benar-benar menentukan impuls sudut setelah dampak, dalam sistem deteksi tabrakan pixel-sempurna. Secara umum, PPCD tidak digunakan untuk gim yang membutuhkan tingkat detail seperti itu, mungkin karena hal itu membuat segalanya jauh lebih sulit daripada fisika berbasis vektor, dalam hal ini. Masalah lain yang saya alami dengan pendekatan ini adalah kemungkinan "macet" ketika Anda memutar karakter di posisi tertentu di level Anda. Box2D dan sejenisnya menangani ini dengan mendorong centroid terpisah ketika mereka terlalu dekat.
Insinyur
Terima kasih banyak! Saya tidak berencana untuk melakukan defleksi jadi saya pikir itu ok. Saya tidak yakin apa yang harus dilakukan dengan peluru yang melaju cepat yang mungkin melompati dinding dalam satu bingkai. Mencari tahu jika mereka melintasi dinding tampak ok, cukup ambil sampel gambar peta dalam sebuah persegi panjang tipis panjang yang merupakan jalur peluru dan cari piksel berwarna dinding. Tapi mencari tahu pixel dinding pertama yang terkena sepertinya sedikit lebih sulit. Saya pikir ketika peluru pertama kali menyala saya akan raycast dan mengambil sejumlah piksel sampel pada interval pendek sepanjang sinar mencari pixel dinding pertama dan menandainya sebagai titik dampak?
TerryB
2
@ JerryB: Saya pikir algoritma garis Bresenham akan bekerja dengan baik di sini. Gambar garis sampai Anda menyentuh piksel dinding dan itu akan menjadi titik tabrakan Anda.
bummzack