Bagaimana saya harus menangani sumber daya yang hilang?

13

Game Anda mengharapkan aset tertentu untuk dimuat, tetapi tidak ditemukan. Bagaimana seharusnya situasi ditangani? Sebagai contoh:

Texture* grassTexture = LoadTexture("Grass.png"); // returns NULL; texture not found
Mesh* car             = LoadMesh("Car.obj");      // returns NULL; 3D mesh not found

Mungkin telah dihapus secara tidak sengaja oleh pengguna, rusak atau salah eja saat dalam pengembangan.

Beberapa tanggapan potensial:

  • Pernyataan (idealnya hanya selama pengembangan)
  • Keluar dari game dengan anggun
  • Lempar pengecualian dan cobalah menanganinya.

Jalan mana yang terbaik?

concept3d
sumber
Salah satu cara untuk melakukannya adalah memverifikasi apakah data game masih utuh. Jika tidak secara otomatis mengunduh ulang data yang hilang. kesalahan> minta pengguna memverifikasi data> unduh. Anda jelas perlu membuat alat kecil untuk ini.
Sidar
@ Sidar Saya suka apa yang Anda katakan lebih dari jawaban yang paling banyak dipilih mungkin Anda dapat menjelaskan lebih baik apa yang Anda katakan
concept3d
Kesalahan yang keliru adalah bahwa kadang-kadang hanya merusak permainan dan orang tidak bisa memainkannya / memulainya. Di Steam misalnya jika game Anda tidak berfungsi dengan benar, Anda dapat memverifikasi data game. Ketika sesuatu tampak rusak / hilang / diubah, Steam akan secara otomatis mengunduh ulang file-file itu. Saya tidak tahu persis bagaimana mereka melakukannya. Tapi mereka jelas mengeceknya dengan beberapa data. Mungkin kode hash? Saya benar-benar tidak tahu. Tetapi Anda harus selalu memiliki aset pengganti standar (hanya tekstur yang mengatakan "kesalahan" atau sesuatu)
Sidar
@ Sidar mengapa tidak memformatnya dengan baik dalam jawaban?
concept3d
Karena saya tidak tahu persis cara kerjanya dan tidak ingin salah informasi tentang itu. Jadi saya tidak bisa memberikan jawaban yang tepat.
Sidar

Jawaban:

19

Banyak gim yang memiliki "materi kesalahan" umum dan "jala kesalahan" yang benar-benar terlihat. Pasangkan ini dengan peringatan di log, tentu saja.

Robert Fraser
sumber
Sepenuhnya setuju dengan posting ini. Anda mungkin ingin melakukan hal yang berbeda dalam rilis / distribusi build.
Jonkel
Untuk rilis build, seseorang dapat memikirkan pendekatan untuk memvalidasi file yang tersedia menggunakan hashing untuk mengunduh file yang hilang atau tidak valid. Namun selama pengembangan itu jelas merupakan pendekatan terbaik untuk menampilkan tekstur kotak-kotak hitam dan magenta untuk menarik perhatian Anda. Untuk model orang bisa menggunakan model KESALAHAN besar yang harus jelas.
Christian Ivicevic
Ini masuk akal untuk Tekstur. tidak begitu banyak untuk Model 3D. Bagaimana jika sebagian besar model 3D hilang? Permainan akan terlihat lucu, sementara itu harus dimainkan di tempat pertama. Bagaimana jika Anda menghitung struktur data spasial Anda berdasarkan properti geometrik dari Model 3D apa yang harus terjadi. Saya hanya dengan ini dalam keadaan sederhana seperti tekstur yang hilang. Tapi saya pikir memeriksa kelengkapan data hanya pendekatan yang lebih baik untuk game komersial.
concept3d
1
@ concept3d - Saya tahu setidaknya mesin Source memiliki jala kesalahan besar yang jelas (saya pernah melihatnya di klien uji Dota 2, ketika mereka menambahkan pahlawan). Saya setuju bahwa jika sejumlah besar data level tidak ada, mungkin yang terbaik adalah hanya melakukan kesalahan, terutama dalam rilis, tetapi untuk tujuan debugging memiliki tanda tanya besar menari-nari tidak terlalu buruk.
Robert Fraser
6

Jika Anda memiliki aset resolusi yang berbeda dari tekstur yang sama , Anda bisa mencoba untuk menyelamatkan situasi dengan menggunakan resolusi yang berbeda.

Texture* grassTexture;
try {
    grassTexture = LoadTexture("Grass.png");
} catch (WhateverExcaption e) {
    grassTexture = LoadTexture("Grass_512.png");
}

Jika itu gagal, mungkin sudah waktunya untuk menebus.

daniel
sumber
2
Anda dapat menambahkan toggle ke tangkapan sehingga di Dev Anda selalu menunjukkan mesh / tex yang hilang tetapi ketika Diterbitkan akan mencoba untuk memulihkan terlebih dahulu dan mungkin memiliki tekstur hilang yang kurang jelas.
DampeS8N