Terkadang Anda akan melihat orang merekomendasikan itu daripada menggunakan file grafik / suara / dll. seperti ini...
// Game code
Image myImage = new Image("path/to/image.png");
... Anda harus menggunakan file manifes sebagai tingkat tipuan sebagai gantinya:
// Manifest file
MY_IMAGE: path/to/image.png
// Game code
Manifest myManifest = new Manifest("path/to/manifest");
Image myImage = myManifest.getImage("MY_IMAGE");
Alasan apa yang akan saya miliki untuk mengambil pendekatan semacam ini? Jika saya tidak menggunakan bahasa yang dikompilasi, apakah masih ada alasan untuk melakukan ini?
sumber
Salah satu alasan: pemrograman berbasis data.
Kode Anda mungkin hanya ingin tahu bahwa itu membutuhkan tekstur "LightWood" dan biarkan pengelola sumber daya menggunakan kunci ini untuk menemukan jalur yang benar ke file. Lebih jauh lagi, dalam skrip, orang tidak ingin mengingat jalur file. Mereka berantakan, mereka bisa salah. Biarkan manifes menentukan di mana file tersebut berada, dan biarkan manusia mencari tahu materi apa yang mereka butuhkan dengan nama itu, bukan nama file.
sumber
Sebagai pola desain umum, manifes berguna ketika Anda ingin mengumpulkan semua informasi tentang sekumpulan objek yang berbeda menjadi satu tempat. Itu tidak harus tentang arsip / file yang dikemas, atau tentang tipuan untuk memungkinkan hal-hal untuk dipindahkan tanpa mengkompilasi ulang / memperbarui referensi asli. Memang yang terakhir dapat menimbulkan lebih banyak masalah daripada menyelesaikannya, jadi Anda hanya akan melakukannya jika itu memecahkan kebutuhan tertentu yang Anda miliki.
Keuntungan besar dari manifes adalah mereka bertindak sebagai indeks terhadap sejumlah besar data di satu tempat yang padat. Karena itu mereka meningkatkan kinerja (karena Anda dapat memuat seluruh manifes dari disk dan menyimpannya dalam memori), terutama dalam kasus di mana Anda perlu mengulangi beberapa objek, tetapi Anda tidak tahu sebelumnya apa objek-objek itu . Jika objek ada di disk, terutama jika ada di beberapa tempat, Anda harus menyentuh sistem file setiap kali Anda ingin beralih ke file. Untuk sistem file berbasis disk, waktu yang diperlukan untuk menyentuh sistem file adalah penghalang, sehingga iterasi file dalam direktori adalah biaya yang sangat besar. Dengan membuat pra-manifes file saat membangun (NB: bukan waktu kompilasi), Anda menukar biaya itu untuk penggunaan memori.
File arsip memerlukan penggunaan manifes, hanya karena daftar isi untuk arsip pada dasarnya adalah manifes itu sendiri, sehingga Anda mendapatkan perilaku secara gratis. Dan jika Anda diharuskan untuk menggunakan manifes untuk aset di satu lokasi, mungkin lebih baik untuk bersikeras bahwa semua aset dirujuk melalui manifes; memungkinkan Anda untuk mengabstraksi lokasi penyimpanan aktual / mekanisme aset dari referensi ke aset tersebut dalam kode. Dengan begitu Anda dapat memiliki satu jenis referensi aset dalam kode Anda, dan tidak harus membuat perbedaan antara jalur file, jalur file arsip + offset, atau sub-aset.
sumber
Selain jawaban lain, itu juga membuat kode Anda sedikit lebih terpisah dari aset Anda. Anda dapat, misalnya, mengizinkan seorang artis untuk bekerja secara langsung dengan file manifes tanpa harus memiliki programmer membuat perubahan dan membuat build baru. Yang diperlukan hanyalah mengubah file manifes untuk menunjuk ke gambar baru dan hanya menjalankan permainan lagi.
sumber
File manifest menyediakan lapisan tipuan antara nama sumber daya dan lokasinya. Setelah lapisan tipuan tambahan hanyalah tanda desain yang berlebihan. Namun, kadang-kadang lapisan tambahan itulah yang dibutuhkan untuk membangun solusi yang elegan dan efisien.
Berikut adalah contoh konkret sederhana di mana pemisahan nama sumber daya / lokasi membantu saya. Sementara dalam pengembangan, aset seni saya dalam kontrol revisi dengan kode sumber. Ini sangat nyaman dan memungkinkan saya untuk beralih dengan cepat. Biasanya nama sumber mencerminkan lokasi itu. Manifes pengembangan sangat lurus ke depan.
Saya tidak ingin mendistribusikan game dengan aset yang tersebar. Jadi, ketika saya siap untuk mendistribusikannya, saya dapat dengan mudah memasukkan aset saya ke dalam file sumber daya dan membuat manifes baru.
Juga tekstur atlas adalah cara terbaik untuk memeras sedikit lebih banyak kinerja dari sistem grafis. Atlase cepat tetapi mereka sulit untuk bekerja sementara seni masih dalam pengembangan. Solusi saya adalah hanya membangun atlas di bagian akhir saat saya mengoptimalkan permainan. Karena saya menggunakan manifes, yang perlu saya lakukan adalah memperbarui manifes untuk menunjuk ke lokasi atlas dan voilà permainan sekarang menggunakan atlas daripada file langsung.
sumber