Saya perlu menyimpan beberapa data game khusus. Peta, pemain, dll.
Semuanya akan memiliki "sub objek". Misalnya, peta dan peta akan memiliki "larik" ubin. yaitu, data hierarkis. Semoga tidak ada biner.
Apa format yang baik untuk ini?
Sejauh ini saya telah mempertimbangkan:
Serailization: Ini CEPAT dan mudah, tetapi cenderung rusak ketika saya mengubah kelas yang mendasarinya :(
XML: Saya sangat benci menguraikan ini. Kasing pengujian saya adalah lebih dari 100 baris kode dan sepertinya banyak sekali "pekerjaan sibuk" bahkan untuk format yang sangat sederhana.
INI: akan sangat janggal untuk data hierarkis.
Protobuf: Tidak pernah menggunakannya, tetapi membaca Anda harus melakukan banyak manual mucking dan istirahat jika Anda mengubah kelas.
Pilihan lain? Itu sebabnya saya di sini!
Sunting: ini adalah Java btw.
Edit 2:
Saya memilih "Serialisasi Biner Terkendali" (lihat di bawah).
Pro:
itu cepat
itu kecil (pada disk) dan dapat dengan mudah dikompresi / didekompresi saat membaca / menulis.
sangat mudah untuk membaca / menulis dari game dan toolset.
Saya dapat memutuskan apa yang akan disertakan / dikecualikan dari objek.
Objek / Data dapat disarangkan.
Cons:
Tidak dapat mengeditnya dengan tangan (seperti XML, YAML, dll)
Tidak dapat dengan mudah membaca / memodifikasinya dengan skrip
Serialisasi Java secara default cukup lambat / kembung dibandingkan dengan implementasi lain, tetapi stabil dan berfungsi
Jawaban:
Untuk menampilkan data hierarki, YAML atau JSON akan menjadi opsi yang baik. Mereka jauh lebih sederhana dan lebih mudah diurai daripada XML.
Pilihan lain adalah proses serialisasi biner "terkontrol". Setiap objek menulis itu menyatakan secara terkendali, yaitu
id Tech 4 (mesin Quake 4 / Doom 3) menggunakan pendekatan seperti itu.
sumber
Format biner yang dibuat dengan baik benar-benar memiliki semua kelebihan, cepat, cukup kecil, dan sefleksibel Anda membuatnya.
Membuat format biner Anda tidak terikat oleh aturan, yang merupakan keuntungan besar, tetapi ironisnya sebagian besar yang memberi struktur file biner nama yang buruk. XML, JSON dan sejenisnya membuat banyak keputusan untuk Anda, mereka jauh dari selalu optimal, tetapi mereka adalah pilihan yang cukup aman yang biasanya akan membantu Anda menghindari beberapa masalah umum.
Identifikasi masalah ini, rancang format Anda dengan yang ada dalam pikiran, dan Anda dapat membuat format biner yang hebat.
Jika Anda tidak berpengalaman / cukup percaya diri untuk membuat format biner dan jumlah data cukup kecil sehingga dampak kecepatannya dapat diabaikan, saya sarankan Anda menggunakan JSON, itu sederhana, tetapi berhasil.
sumber
Pilihan Anda format file sangat tergantung pada Anda saat toolset dan permainan Anda berniat untuk membuat. Dengan mengatakan ...
Toolset adalah salah satu faktor terpenting ketika memutuskan format file game. Jika Anda membuat format biner , Anda harus selalu memastikan bahwa Anda memiliki alat untuk memasukkan data gim Anda. Ini bisa sesederhana hex editor, atau serumit Unreal Editor.
Saya kira keuntungan utama XML, YAML, atau file bahasa lainnya, adalah Anda dapat mengeditnya dengan mudah melalui editor teks. Dan menggunakan standar yang ada, memastikan Anda tidak salah . Tapi, ini sangat membosankan ketika Anda memiliki seribu file, yang membawa saya ke poin saya berikutnya.
Permainan. Game seperti apa yang kamu buat? Mengapa saya mengatakan ini akan mempengaruhi format file? Karena, jika Anda membuat sesuatu seperti bomberman 2D, Anda bisa lolos dengan file teks sederhana seperti:
Dengan kata lain, selalu gunakan format yang paling jelas untuk data spesifik Anda . RPG adalah genre game yang paling rumit untuk dibuat. Mereka membutuhkan banyak data. Tetapi tidak berarti Anda harus menempel format tertentu , baik itu biner atau berbasis teks untuk semua data dalam game.
Secara umum, Anda ingin mendeskripsikan teks dengan format teks, dan grafik dengan format biner. Berikut ini akan memberi Anda contoh:
Singkatnya, itu adalah rekomendasi saya sepenuhnya bahwa jika memungkinkan, Anda tidak membuat skrip data Anda, kecuali benar-benar diperlukan . Pengguna akhir tidak peduli seberapa hebat formatnya, asalkan permainan dapat dimainkan, itu yang terpenting.
Cheers, roy =)
sumber
BSON cukup bagus. http://bsonspec.org/ . Lebih mudah untuk menguraikan JSON dan lebih baik dalam berisi data biner, tetapi masih memiliki struktur yang bagus. Ini agak mirip dengan buffer protokol. The downside adalah bahwa ada dosis tampaknya banyak dukungan alat untuk itu di luar mongodb.
EDIT: MsgPack ( http://msgpack.org/ ) juga mirip dengan BSON dan tampaknya mendapatkan daya tarik lebih.
sumber
Apa yang terjadi dengan format data biner khusus Anda? Jika Anda takut serialisasi mentah, tulis sistem Anda sendiri yang menulis bidang sesuai kebutuhan, dan membacanya kembali. Tidak perlu xml, yang memang terlalu besar dan rumit untuk situasi di mana Anda tidak memerlukan transparansi yang disediakan oleh format. Cukup tentukan format file yang ditentukan dengan baik dan berpegang teguh padanya, menyisakan mungkin beberapa ruang untuk perluasan set data Anda di setiap record dengan menambahkannya dengan nilai nol (misalkan Anda memiliki record 100 byte sekarang, padukan ke 150 untuk digunakan di masa depan.
Tambahkan nomor versi dan mungkin sebuah checksum sehingga Anda dapat mengetahui bidang apa yang harus diisi dan melakukan pemeriksaan kewarasan untuk validitas, dan Anda siap melakukannya.
sumber
Anda dapat mencampur XML atau format lain dengan penyisipan Base64 untuk beberapa data tertentu, dan untuk bidang yang perlu dibaca Anda dapat menggunakan TEXT biasa
sumber