Untuk mesin gim khusus, apa yang harus saya lakukan jika data inti saya salah atau hilang?


27

Saya sedang menulis mesin khusus untuk sebuah game. Saya memulai permainan ini dengan baik sebelum saya mengerti mengapa saya harus menggunakan middleware, dan terlalu jauh untuk menulis ulang.

Sebagian besar data saya berasal dari file eksternal, dan saya tidak hanya merujuk ke aset; Saya mendefinisikan semua objek game saya melalui .JSON. Tetapi, sayangnya, saya manusia; kadang-kadang file data saya tidak valid, atau saya mengubah format tetapi lupa memperbarui file, atau loader itu sendiri buggy.

Jika, karena alasan apa pun, upaya memuat beberapa bentuk aset dalam mesin kustom gagal, opsi apa yang saya miliki?

Ini bukan duplikat dari Bagaimana saya harus menangani sumber daya yang hilang? , karena pertanyaan itu adalah tentang aset yang dihadapi pengguna seperti model atau tekstur. Tekstur yang buruk dapat diganti dengan kotak-kotak, suara buruk dengan keheningan, dan teks buruk dengan "GALAT". Masalah saya terletak pada data yang penting untuk menjalankan game, seperti level, definisi objek game, dan tata letak GUI.


7
Saya menggunakan pendekatan serupa untuk game saya. Saya sebenarnya membangun aplikasi utilitas kecil untuk menghasilkan file data permainan saya untuk menghindari kesalahan manusia - dengan cara ini saya bisa memodifikasi file jika saya ingin membuat perubahan tanpa harus menulis 100.000 baris JSON secara manual.
JDSweetBeat

Anda juga dapat menjalankan data Anda melalui validator sebelum memuatnya.
JDSweetBeat

JSON saya cukup kecil sehingga secara otomatis membuatnya tidak berguna. Selain itu, validator tidak akan membantu jika JSON hilang, atau ada bug dalam hal yang seharusnya membacanya. Terima kasih atas pemikirannya.
JesseTG

Jawaban:


44

Catat kesalahan dan keluar dengan anggun.

Idealnya, tampilkan kesalahan yang dapat dibaca manusia di layar juga. Seharusnya ada pipa inti fungsionalitas kode keras yang beroperasi tanpa file data ini. Ini pipa yang sama yang memuat file data di tempat pertama. Itu harus mampu mendeteksi ketika file data inti ini rusak atau rusak dan akhiri aplikasi. Jika pengguna dimaksudkan untuk memodifikasi file-file ini, tidak ada banyak hal lain yang dapat dilakukan. Kalau tidak, Anda perlu menerapkan strategi pengujian untuk memastikan korupsi semacam ini tidak terjadi. Kemudian Anda dapat memastikan Anda hanya merilis file data yang valid.


12

Byte56 menyebutkan satu opsi. Setidaknya ada satu yang lain:

Asumsikan nilai default dan tampilkan Peringatan.

Bergantung pada sifat data Anda, mungkin dapat diterima untuk mengasumsikan beberapa nilai default dan memperingatkan pengguna bahwa "karena file xxx gagal dimuat, kami menggunakan objek generik yyy."


6

Itu tergantung pada apakah ini terjadi selama pengembangan atau rilis.

Selama pengembangan, Anda akan memiliki segala macam hal yang hilang, kesalahan, dan kekacauan, terus-menerus, setiap saat, dan Anda bahkan mungkin ingin "panas" memuat aset sesuai permintaan atau mengganti aset saat permainan sedang berjalan. Anda dapat mengedit skrip dengan game yang dijalankan untuk menguji kinerja AI yang lebih baik, atau apa pun sejenisnya.

Sangat menjengkelkan jika program menampilkan dialog kesalahan dan keluar setiap saat, dan Anda harus memulai ulang yang membutuhkan 2-3 menit. Tujuan pengembangan adalah untuk menghentikan Anda (yang waktunya adalah aset paling berharga) sesedikit mungkin.
Jadi, jika misalnya, tekstur hilang, Anda ingin melihat sesuatu seperti kotak-kotak merah-putih, mungkin dengan kata "hilang" dieja di atasnya sebagai tekstur pengganti, sehingga segera jelas bahwa ada sesuatu yang aneh . Tapi Anda tidak ingin game keluar dengan anggun, atau bahkan crash. Informasi terperinci tentang apa yang hilang di logfile Anda sangat membantu.

Di sisi lain, dalam rilis, set lengkap file aset idealnya [1] harus melalui pipa aset otomatis Anda. Ini perlu tidak lebih dari parser sederhana yang membaca semua JSON Anda dan kemudian memeriksa silang bahwa setiap modul konsisten dalam dirinya sendiri, dan memverifikasi bahwa setiap aset yang Anda referensi benar-benar ada, dan kemudian ritsleting seluruh kumpulan file di beberapa cara yang dikenal (tetapi tidak harus standar) yang mudah bagi mesin Anda untuk membaca, opsional menambahkan beberapa checksum.

Anda tahu bahwa tidak akan ada kegagalan karena pipa Anda memeriksa bahwa semuanya ada di sana sebelum Anda merilis paket kepada pengguna akhir. Jadi, jika kegagalan terjadi, mungkin ada kesalahan transmisi, atau lebih besar kemungkinan pengguna mencoba menipu. Dalam kedua kasus tersebut, program harus menampilkan pesan yang mengatakan bahwa file aset rusak, dan keluar.

Atau, Anda dapat menawarkan opsi untuk mengunduh salinan aset yang masih asli dari internet (jika Anda memiliki server unduhan). Tetapi untuk menghindari mimpi buruk dukungan pelanggan, pastikan untuk bertanya sebelum mengunduh gigabyte data.


[1] Realitas mungkin terlihat berbeda, Anda bahkan mungkin menemukan aset yang hilang pada judul AAA yang pembuatnya "harus tahu", tetapi mereka biasanya memiliki tenggat waktu yang tidak realistis dan tim besar yang berganti juga. Idealnya semua yang Anda kirim telah melalui pipa otomatis dan dijamin akan lengkap.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.