Game saya memiliki banyak tipe orang baik dan berbagai tipe orang jahat. Mereka semua akan menembakkan proyektil satu sama lain, tetapi saya tidak ingin ada kerusakan agunan yang tidak disengaja terjadi untuk kedua penyelarasan. Jadi orang jahat seharusnya tidak dapat memukul / merusak orang jahat lainnya dan orang baik seharusnya tidak dapat memukul / merusak orang baik lainnya.
Cara saya berpikir untuk menyelesaikan ini adalah dengan membuatnya sehingga Unit
instance (ini adalah javascript, btw), memiliki alignment
properti yang dapat berupa good
atau bad
. Dan saya hanya akan membiarkan tabrakan terjadi jika
class Attack
boolean didAttackCollideWithTarget(target)
return attack.source.alignment != target.alignment and collisionDetected(attack.source, target)
Ini adalah pseudo-code, tentu saja.
Tapi saya mengajukan pertanyaan ini karena saya merasa mungkin ada cara yang jauh lebih elegan untuk mendesain ini selain menambahkan properti lain ke Unit
kelas saya .
Jawaban:
Penyaringan Tabrakan
Situasi yang lebih kuat yang berkembang menjadi banyak lapisan adalah menggunakan pemfilteran, yang tidak sama dengan pengelompokan.
Ini bekerja paling baik dengan memberikan setiap objek 2 bitmask .
Dan hanya memicu tabrakan jika di bawah ini benar.
Yang termudah adalah default Mask ke 0xFFFF yang menghasilkan itu bertabrakan dengan segalanya. Dan default Kategori ke 0x0001. benda bertabrakan dengan kategori topeng lainnya akan ada tabrakan.
Cara lain untuk memikirkannya adalah setiap objek memiliki tipe dan daftar semua tipe yang dapat bertabrakan dengannya. Hanya ketika dua benda saling bertabrakan dengan jenis satu sama lain ada tabrakan. Anda bisa memiliki perilaku yang sama memiliki daftar enum bukan topeng tetapi topeng dengan urutan besarnya lebih cepat.
Skenario yang Anda gambarkan
Saya suka memanfaatkan enum dalam situasi ini.
Jadi katakan kita punya.
Tembakan peluru oleh orang baik
Orang baik
Orang jahat
Yang menghasilkan di bawah ini ketika peluru yang ditembakkan oleh pria baik memukul pria baik lain.
Tapi itu akan menimpa orang jahat.
sumber
Saya memiliki masalah yang sama pada proyek saya saat ini (di Jawa). Setelah beberapa percobaan diselesaikan dengan membuat empat daftar. Solusi ini dibuat di Jawa dan untuk Game 2D tetapi juga harus berfungsi, dengan cara yang sama, dalam JavaScript
kode semu
pseudo-code, sama untuk Bullets kelas
Ini mungkin bukan solusi terbaik atau tercepat tetapi ini akan membantu Anda saat ini. Maaf saya tidak bisa memberi Anda solusi dalam JavaScript tetapi saya harap saya bisa membantu Anda
Ngomong-ngomong bahasa Inggris saya bukan yang terbaik tetapi saya harap Anda bisa mengikuti penjelasan saya
sumber