Membuang hanya sumber daya tertentu dalam XNA?


13

ContentManager di XNA 4.0 hanya memiliki satu metode Bongkar () yang Membongkar semua Aset.

Saya ingin memiliki beberapa Aset "global" yang selalu dimuat, tetapi kemudian saya ingin Aset per-Level yang harus Dibongkar saat level diubah.

Haruskah saya membuat Mesin Virtual kedua dari ContentManager sebagai bagian dari Kelas Level.cs? Atau haruskah saya menggunakan Game.Content dan kemudian memanggil .Posisikan pada Aset yang saya muat? Atau haruskah saya membuat ContentManager sendiri di atas fungsi ReadAsset seperti diuraikan di sini ?

Jawaban:


12

Buat instance kedua dari ContentManager.

Anda seharusnya tidak pernah Dispose() memuat sesuatu dari ContentManager (menggunakan implementasi default), karena instans ini dibagikan dan digunakan kembali.

Membuat versi ContentManager Anda sendiri adalah semacam ortogonal. Bagaimanapun Anda akan membuat instance kedua ContentManager (atau kelas yang berasal dari itu). Jadi, jika implementasi yang ada sesuai dengan tujuan Anda - maka gunakan, jika tidak timpa apa yang ingin Anda ubah.

Tentu saja, jika gim Anda relatif kecil - maka tidak masalah jika Anda hanya menggunakan satu ContentManager dan tidak repot-repot membongkar konten antar level.


5
+1 dan pengingat untuk diri saya untuk ditautkan di sini saat seseorang mencoba memberi tahu saya betapa hebatnya pola tunggal untuk manajer aset.

Saya juga menemukan Demo Manajemen Status Game di Situs Web XNA yang menggunakan persis ini (1 Manajer Konten global dan yang kedua di Layar yang membutuhkannya). Tidak terlalu intuitif, tetapi akan berhasil :)
Michael Stum
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.