Seberapa kuat mesin pemain tunggal harus menolak data yang tidak valid?

11

Dalam permainan pemain tunggal, ketika mencoba membangun entitas dari komponen yang ditentukan dalam skrip eksternal, menurut Anda apa yang lebih diinginkan untuk terjadi ketika salah satu komponen itu terbentuk dengan buruk:

  • Haruskah mesin melewati komponen itu dan membiarkan entitas hidup di dunia game dengan hanya komponen yang ditulis dengan baik?
  • Atau haruskah itu tidak menambahkan entitas ke dunia sama sekali jika salah satu komponennya tidak terbentuk dengan baik?

Catatan, saya tidak berbicara tentang mencatat kesalahan - yang seharusnya terjadi tanpa mengatakan - hanya tentang apa yang harus terjadi pada entitas.

Paul Manta
sumber
Apakah kita berbicara tentang pemain tunggal atau multi pemain?
o0 '.
@Lohoris Pemain tunggal.
Paul Manta
2
Karena sebagian besar jawaban sudah disinggung, siapakah audiens Anda? Apakah Anda membuat game yang dapat dimodifikasi atau yang Anda bicarakan untuk tujuan pengembangan internal?
Tetrad
@Tetrad Saya ingin permainan menjadi ramah-ramah mungkin.
Paul Manta

Jawaban:

11

Jika Anda berbicara tentang game yang dapat dimodifikasi, maka Anda mungkin ingin mengikuti salah satu saran Anda di atas. Tetapi jika Anda khawatir tentang kesalahan Anda sendiri, saya katakan jangan lakukan itu. Saya telah menjadi pendukung Gagal-Cepat . Jika ini adalah kesalahan yang Anda buat dan harus atasi sebelum melepaskan, Anda harus membuat kesalahan itu jelas. Artikel yang ditautkan di bagian bawah halaman wiki adalah bacaan yang bagus tentang masalah mengapa gagal cepat itu baik, dan kapan harus dan tidak boleh digunakan.

John McDonald
sumber
2
Saya pikir ini adalah dikotomi yang hebat, membedakan antara kesalahan pengguna dan kesalahan pengembang. Masuk akal untuk alasan yang sama persis bahwa kesalahan kompiler umumnya cukup mudah untuk diperbaiki tetapi kesalahan runtime / semantik adalah iblis.
jhocking
Jika mesin menyertakan cara untuk memodifikasi entitas setelah permainan dimulai, Anda setidaknya harus memberi diri Anda kesempatan untuk memperbaiki kesalahan sebelum Anda gagal.
Blecki
7

Perbedaan antara pengguna dan pengembang tidak selalu jelas dalam pengembangan game. Teknik pemrograman standar seperti "gagal cepat" tidak selalu menguntungkan, terutama ketika ukuran tim bertambah.

Misalnya, mungkin artis teknis Anda telah mengacaukan garis batas penargetan - hancurkan mundur, katakanlah, jadi itu hanya memuat pada sistem SM4, dan dia tidak menyadarinya karena dia mendapat bagian atas sistem garis. Ini menyebabkan beberapa animasi gagal dimuat. Animasi-animasi tersebut dirujuk oleh mantra tertentu yang ditulis oleh desainer tempur Anda. Akhirnya, perancang level Anda mencoba untuk membuat spawns di tempat dan spawns semua kebetulan mampu melemparkan mantra itu - tetapi sekarang dia tidak dapat menempatkan salah satu dari mereka di dunia karena mantra mereka tidak valid karena efeknya tidak muncul. valid karena shader tidak mau dimuat karena desainer selalu memiliki komputer terburuk.

Jadi demo Anda belum siap sebelum jam 2 siang dan investor Anda bertanya-tanya mengapa Anda bahkan tidak bisa mendapatkan satu musuh pun dalam game dan proyek Anda akan ditutup.

Atau Anda memilih opsi di mana Anda mencatat kegagalan tetapi terus berusaha, dan permainan berjalan dengan baik kecuali beberapa efek mantra musuh tidak muncul - tetapi para investor tidak tahu seperti apa seharusnya itu, sehingga mereka tidak tahu. memperhatikan.

Untuk alasan itu, saya hampir selalu akan menganjurkan opsi pertama - menelurkan entitas sebanyak yang Anda bisa. Ada beberapa kasus kegagalan-cepat - seperti jika data tidak boleh diedit kecuali oleh orang-orang yang mampu melakukan pembangunan (yaitu programmer dan produsen teknis) dan selalu diperiksa 100% saat dimuat, atau jika Anda benar-benar yakin orang yang bertanggung jawab atas masalahnya adalah orang yang menggunakan editor - tetapi itu bukan kasus yang biasa, dan memerlukan banyak infrastruktur teknis, yang Anda mungkin belum siap untuk berinvestasi.

ashes999
sumber
1
Saya ingin berpikir bahwa skenario yang Anda usulkan dapat dicegah dengan sistem kontrol sumber yang baik. Dalam skenario Anda, artis telah "merusak build". Orang lain yang bekerja dengan shader yang rusak harus dapat mengembalikan shader ke revisi sebelumnya sampai masalahnya telah diselesaikan.
John McDonald
1
@ John Sementara kontrol sumber yang baik adalah suatu keharusan, dan kadang-kadang rollback diperlukan untuk mengembalikan sisa proyek ke kondisi kerja sampai kegagalan diselesaikan secara lokal, itu jarang berguna sebagai mekanisme pencegahan dan tidak boleh diandalkan seperti itu .
@ John: Pada proyek besar, pembangunan bisa memakan waktu berjam-jam (atau satu hari penuh). Jadi Anda benar-benar membutuhkan pendekatan dua cabang - Anda tidak hanya perlu kontrol sumber, tetapi kontrol biner, sehingga non-programmer dapat memutar kembali ke seluruh build sebelumnya. Tapi tentu saja, yang memiliki risiko dan biaya sendiri, karena sekarang Anda sedang mengembangkan konten baru terhadap lainnya out-of-date konten, dengan executable yang mungkin memiliki lainnya bug buruk. Dan bahkan menemukan build yang tepat untuk mundur mungkin membutuhkan waktu 30+ menit - jika desainer Anda semua harus berhenti selama setengah jam dan bermain-main dengan build, itu adalah uang besar yang terbuang sia-sia.
@ Jo Wreschnig: Itu masuk akal. Jadi saya kira pasti ada titik di mana kegagalan cepat tidak lagi menjadi aset. Baik dalam tipe orang yang menggunakannya, atau pada proyek dengan ukuran tertentu. Saya kira itu tergantung pada orang-orang dalam tim untuk memutuskan apa yang berhasil bagi mereka.
John McDonald
2
Saya tidak yakin cepat keras gagal, yang benar-benar apa pertanyaannya adalah tentang, yang pernah aset. Bahkan pada "tim" satu orang, mungkin saya tidak ingin berurusan dengan kode shader karena saya benar-benar harus menyelesaikan level ini. Tentu saja menulis penanganan kesalahan yang baik dan mencatat semua kesalahan, tetapi saya hampir selalu memiliki gagasan yang lebih baik tentang apa yang penting sekarang saat ini daripada yang saya lakukan ketika saya menulis kode kesalahan enam bulan lalu.
1

Pengguna harus dapat melihat pratinjau entitas yang akan ia impor, dan tahu sebelumnya jika ada kesalahan.

Entah bagaimana Anda harus memutuskan kesalahan apa yang harus berakibat fatal, mencegahnya ditambahkan ke permainan, dan mana yang dapat diabaikan sebagai peringatan .

Tentu saja jika karena alasan apa pun entitas yang diimpor mungkin dapat mengubah data savegame secara ireversibel, Anda sebaiknya meminta itu tanpa cacat.

o0 '.
sumber
0

Saya menyarankan bahwa dalam pengembangan, harus berisik tentang data yang tidak valid. yaitu mencatat segala sesuatu di suatu tempat itu akan dibaca. Namun, jika mesin Anda dapat mengabaikan hal ini dan melanjutkannya, maka ia harus melakukannya. Anda dapat memiliki logika seperti

void setValue(int value) {
    if (value < MIN_VALUE) {
       log(value + " is too low, using " + MIN_VALUE);
       value = MIN_VALUE;
    }
    if (value > MAX_VALUE) {
       log(value + " is too high, using " + MAX_VALUE);
       value = MAX_VALUE;
    }
}

Bahkan dalam permainan multi-pemain ini dapat diterima kecuali Anda mengasumsikan bahwa satu pemain mencoba menipu sistem.

Setelah merilis perangkat lunak, Anda mungkin ingin mematikan logging ini secara default dengan asumsi para pemain tidak akan membaca log ini.

Peter Lawrey
sumber
Dengan asumsi log tidak ada masalah kinerja, Anda harus tetap masuk dalam rilis build dan mengirim laporan kembali ke tim pengembangan. (Tentu saja memberi tahu para pemain dengan tepat.)
Anda harus dapat merekam lebih banyak log ringkas untuk dirilis. Dalam perkembangannya Anda bisa cenderung lebih bertele-tele.
Peter Lawrey