2012-10-04 1 views
3

게임 창의 크기를 조정하고 뷰포트의 높이가 0이되면 GC가 spritebatch를 삭제합니다. 무슨 일 이니? 어떻게 이것을 막을 수 있습니까?XNA 게임 창의 세로 크기를 최소로 변경하면 spritebatch에 대해 ObjectDisposedException이 발생합니다. 이유는 무엇입니까?

+1

이제 나는 이것을 방지하는 방법을 알고 있지만, 여전히 spritebatch가 처리되는 방법을 아는 것은 흥미로울 것입니다. – user1306322

+1

GC는 'SpriteBatch'를 처리하지 않습니다. 방금 약간의 테스트를 실시했는데 XNA가 * 0으로 크기가 조절되는 것을 막기 위해 사용 된 것으로 보입니다. 크기 조정을하면 그래픽 장치 (및 모든 리소스)가 다시 초기화 될 수 있습니다. 창의 크기가 0이기 때문에 다시 초기화하지 못하면'SpriteBatch'는 처리 된 것과 동일한 상태로 끝납니다. –

+0

빈 새 프로젝트에서이 작업을 시도했지만 크기를 조정하면이 오류가 발생하지만 이전 프로젝트 중 아무 것도 작동하지 않습니다. 음, 제로로 크기를 조절할 필요가 없다고 생각합니다. 그래서 대답과 같이 최소 크기를 설정할 수 있습니다. – user1306322

답변

3
Form gameForm = (Form)Form.FromHandle(Window.Handle); 
gameForm.MinimumSize = new System.Drawing.Size(800, 600); 

짧고 달콤한!

+0

니스. 그러나 이렇게하려면 불필요한 모호성을 피하기 위해'using System.Windows.Forms; 또는'Forms = System.Windows.Forms;를 사용해야합니다. – user1306322

+0

여전히 동일한 값을 가진 모든 경우에 적용되는 것은 아니며 창 테마 테두리의 크기를 보완해야합니다. 이 작업은'form.ClientArea'를 사용하여 수행해야합니다. – user1306322

1

이 동일한 문제가 있었고 일부 빠른 디버깅을 통해 XNA가 UnloadContent를 호출 한 다음 다시 LoadContent를 호출하여 리소스를 다시 초기화합니다. 내 추측 그것은 GraphicsDevice 또는 무언가를 잃고 따라서 다시로드합니다.

LoadContent의 GraphicsDevice와 관련된 항목을 만들면이 문제가 해결됩니다.

이제는이 특별한 경우에 최소 크기를 설정하는 것이 좋지만 Xbox와 Windows 간의 휴대용 솔루션인지는 알 수 없습니다. 그러나 UnloadContent가 호출되는 비슷한 상황이 발생할 수 있으므로이 방법을 고수하는 것이 가장 좋습니다.