Saat ini saya sedang mengembangkan penembak zombie top down, realtime,. Saya coding ini di Jawa, menggunakan JBox2D sebagai mesin fisika saya. Saya telah mengkode jaringan minggu ini, dan sekarang saya sampai ke sinkronisasi fisika.
Saya berencana untuk menggunakan model server klien / otoritas yang dapat diprediksi, di mana klien bebas bergerak, selama server menyetujuinya nanti. Ini melibatkan klien mengirim paket yang berisi data perpindahan ke server, dan server menghitung latensi, dan mensimulasikan kembali dunia dari keadaan yang lebih lama.
Masalah saya adalah, mesin fisika saya saat ini, JBox2D (pada dasarnya port dari Box2D), tidak mendukung memutar kembali dunia, dan tampaknya tidak mudah untuk membuat serialisasi data dunia. Saya punya 2 solusi, saya bisa memodifikasi / memperluas mesin fisika saya saat ini, atau menulis sendiri.
Alasan untuk menulis mesin fisika saya sendiri -
- Saya dapat menghapus fitur yang tidak perlu. Dalam permainan top down, saya hanya benar-benar membutuhkan mekanik tabrakan, dan kekuatan penanganan. Tidak ada gravitasi yang terlibat.
- Saya dapat memahami kode dengan lebih baik, dan [kemungkinan besar] akan lebih mudah untuk menerapkan fungsi roll back
Alasan untuk memperpanjang / memodifikasi JBox2D
- Menulis mesin fisika saya sendiri, akan menjadi pekerjaan yang signifikan, yang bisa jadi rumit
- JBox2D memiliki komunitas yang sangat mendukung, yang dapat membantu saya dengan dev saya
- JBox2D, memiliki optimasi khusus, untuk hal-hal seperti deteksi tabrakan, yang membuatnya berguna
- Beberapa pekerjaan telah dilakukan dalam hal ini, tetapi sedikit kode yang telah dibagikan
Jadi, apa pendapat Anda? Ini adalah game pertama saya, dan saya bukan pengembang game profesional. Kalau ada yang bisa memberikan beberapa tautan untuk pekerjaan yang sudah dilakukan di daerah (sebaiknya menggunakan JBox2D / Box2D / Java).
sumber
strictfp
mana-mana, yang akan berdampak serius pada kinerja. Kalau tidak, server dan klien mungkin tidak mendapatkan hasil yang persis sama. Saya akan merekomendasikan menggunakan titik tetap sebagai gantinya.Jawaban:
Deteksi tabrakan dalam 2D sangat sederhana. Saya tidak tahu mengapa Anda akan repot-repot menggunakan mesin fisika. Dan karena semua kekuatan penanganan lurus ke depan atau pada kurva (tidak jatuh, mengubah diagnosa dll.) Secara pribadi itu tidak punya otak bagi saya yang harus Anda pilih. Membuat sendiri itu sederhana. Tabrakan:
akun untuk 3 kemungkinan tabrakan yang dapat terjadi dalam 2 persegi panjang:
EDIT: Seperti dikomentari, saya jauh kurang akrab dengan masalah ini, dan tidak boleh berkonsultasi tentang tabrakan peluru / proyektil.
Ketika saya telah bekerja dengan peluru di ruang 2D, saya menggunakan semacam jalur yang bekerja di kedua garis lurus dan melengkung di mana saya akan melempar proyektil menggunakan mesin fisika (yang saya tidak buat dari awal) dan menggunakan tabrakan standar.
Baca tentang membangun ini dari awal di komentar.
EDIT: * Percayalah, * terlepas dari mana, Anda akan memerlukan beberapa bentuk perhitungan mati di mesin gim Anda, karena proyektil dan berapa banyak proyektil yang dapat ditampilkan di layar pada waktu tertentu. Anda benar-benar tidak ingin memperbarui setiap peluru di layar per frame di lokasi yang diberikan itu. Tapi itu cara yang bagus untuk membuat game menjadi lambat: D! Anda seharusnya hanya memperbarui hal-hal ini:
Sekarang perbarui data di mesin sesuai dengan data itu, bukan pada server untuk setiap proyektil sialan, dan kirim paket data untuk setiap peluru. (Bayangkan melakukan itu bahkan dengan hanya 2 senapan mesin di layar! Yesus!)
sumber