กำลังกำจัดทรัพยากรบางอย่างใน XNA หรือไม่


13

ContentManager ใน XNA 4.0 มีวิธีการ Unload () วิธีเดียวที่ยกเลิกการโหลดสินทรัพย์ทั้งหมด

ฉันต้องการมีสินทรัพย์ "ทั่วโลก" ที่โหลดอยู่เสมอ แต่จากนั้นฉันต้องการสินทรัพย์ต่อระดับที่ควรเลิกโหลดเมื่อระดับมีการเปลี่ยนแปลง

ฉันควรสร้างอินสแตนซ์ที่สองของ ContentManager เป็นส่วนหนึ่งของ Level.cs Class หรือไม่ หรือฉันควรใช้ Game.Content จากนั้นโทร. จัดการกับทรัพย์สินที่ฉันโหลด? หรือฉันควรสร้าง ContentManager ของตัวเองที่ด้านบนของฟังก์ชั่น ReadAsset ตามที่อธิบายไว้ที่นี่ ?

คำตอบ:


12

ContentManagerสร้างตัวอย่างที่สองของ

คุณไม่ ควรDispose()โหลดสิ่งต่าง ๆ จาก ContentManager (โดยใช้การนำไปใช้งานเริ่มต้น) เนื่องจากอินสแตนซ์เหล่านี้ถูกแชร์และนำกลับมาใช้ใหม่

การสร้าง ContentManager เวอร์ชันที่เป็นของคุณเองนั้นเป็นแบบมุมฉาก ไม่ว่าจะด้วยวิธีใดคุณจะสร้างอินสแตนซ์ที่สองของ ContentManager (หรือคลาสที่ได้มาจากมัน) ดังนั้นหากการใช้งานที่มีอยู่เหมาะสมกับวัตถุประสงค์ของคุณ - ให้ใช้มันมิฉะนั้นจะแทนที่สิ่งที่คุณต้องการเปลี่ยน

แน่นอนว่าถ้าเกมของคุณมีขนาดค่อนข้างเล็ก - มันจะไม่สำคัญถ้าคุณใช้ ContentManager เพียงตัวเดียวและไม่รบกวนการขนถ่ายเนื้อหาระหว่างเลเวล


5
+1 และการแจ้งเตือนให้ฉันเชื่อมโยงที่นี่ในครั้งต่อไปที่มีคนพยายามบอกฉันว่ารูปแบบซิงเกิลที่ดีสำหรับผู้จัดการสินทรัพย์

ฉันยังพบการสาธิตการจัดการสถานะเกมที่เว็บไซต์ XNA ซึ่งใช้สิ่งนี้อย่างแน่นอน (1 ตัวจัดการเนื้อหาระดับโลกและตัวที่สองบนหน้าจอที่ต้องการ) ไม่ง่าย แต่จะทำ :)
Michael Stum
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.