XNA에서 특정 리소스 만 폐기 하시겠습니까?


13

XNA 4.0의 ContentManager에는 모든 자산을 언로드하는 Unload () 메소드가 하나만 있습니다.

항상로드되는 "글로벌"자산을 갖고 싶지만 레벨이 변경 될 때 언로드해야하는 레벨 별 자산을 원합니다.

Level.cs 클래스의 일부로 ContentManager의 두 번째 인스턴스를 작성해야합니까? 아니면 Game.Content를 사용한 다음로드 한 자산에서 .Dispose를 호출해야합니까? 아니면 여기에 설명 된대로 ReadAsset 함수 위에 자체 ContentManager를 만들어야 합니까?

답변:


12

의 두 번째 인스턴스를 만듭니다 ContentManager.

이러한 인스턴스가 공유되고 재사용되므로 ContentManager에서로드 하지 않아야합니다 Dispose()(기본 구현 사용).

자신 만의 ContentManager 버전을 작성하는 것은 일종의 직교입니다. 어느 쪽이든 ContentManager의 두 번째 인스턴스 (또는 그로부터 파생 된 클래스)를 작성하게됩니다. 따라서 기존 구현이 목적에 맞는 경우 사용하고 변경하지 않으려면 변경하십시오.

물론 게임이 상대적으로 작은 경우-하나의 ContentManager를 사용하고 레벨간에 컨텐츠를 언로드하는 것을 방해하지 않는 것이 실제로 중요하지 않습니다.


5
다음에 누군가에게 자산 관리자에게 싱글 톤 패턴이 얼마나 위대한 지 말해 주려고 할 때 +1하고 여기에 연결하라는 알림.

또한 XNA 웹 사이트에서 정확히 이것을 사용하는 게임 상태 관리 데모를 찾았습니다 (전 세계 콘텐츠 관리자 1 개와이를 필요로하는 화면에서 2 개). 매우 직관적이지 않지만 그렇게 할 것입니다 :)
Michael Stum
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.