2010-04-07 41 views
6

Trò chơi XNA có phương thức Unload(), trong đó nội dung được cho là không được tải. Nhưng điểm này là gì? Nếu tất cả nội dung đang được tải xuống, thì trò chơi phải thoát, trong trường hợp đó mọi thứ sẽ được thu thập rác, đúng không?XNA: Điểm của Unload() là gì?

Trả lời

6

Theo như tôi hiểu, nó không hữu ích cho bất kỳ sử dụng tiêu chuẩn nào, vì khi bạn nói bộ thu gom rác xử lý mọi thứ cho bạn.

Tuy nhiên, thật hữu ích khi có một sự kiện được gọi khi trò chơi của bạn thoát cho nhiều thứ. Ví dụ bạn có thể gửi một tin nhắn cho tất cả các khách hàng trong một trò chơi nhiều người nói với họ bạn đang thoát, và sau đó bạn có thể để cho bộ thu gom rác giết kết nối mạng của bạn.

+1

Chỉ vì tất cả các đối tượng của bạn sẽ được dỡ xuống khi bạn đóng chương trình của bạn không có nghĩa là bạn không nên sử dụng 'IDisposable.Dispose()' hoặc 'using (...)'. –

+0

Đó là một điểm tốt. – Martin

+0

Bạn cũng có thể ghi đè phương thức sự kiện Game1.OnExiting được bảo vệ để đạt được điều này. Nó có ý nghĩa hơn khi sử dụng OnExiting, ví dụ, gửi một tin nhắn khi trò chơi đóng. –

2

Luôn lịch sự để tự vệ sinh sau khi bạn ... nếu không mọi người sẽ ngừng cho phép bạn chơi với đồ chơi của họ.

Dự đoán tốt nhất của tôi là nó sẽ cho phép bạn tổ chức các đối tượng Game vào dự án của bạn và cung cấp cho bạn cách để làm sạch chúng sau này. Điều này sẽ cho phép sử dụng lại mã của bạn tốt hơn. Hy vọng rằng một XNA MPV hoặc một người nào đó từ đội XNA sẽ tìm thấy điều này và cung cấp cái nhìn sâu sắc hơn.

+0

Điều gì có nghĩa là "tiếp theo" đối tượng 'Trò chơi'? –

+0

Nó có nghĩa là tôi béo ngón tay 'làm tổ' ... cảm ơn, tôi sẽ sửa chữa nó. –

+1

Thậm chí sau đó nó không phải là hữu ích, sau khi tất cả các đối tượng trò chơi là rác thu thập quản lý nội dung sẽ được thu thập và do đó tất cả nội dung nó sẽ được quản lý. – Martin

1

Dỡ bỏ đôi khi là cần thiết, đặc biệt là khi làm việc với các thư viện không được tải xuống thông qua Bộ thu gom rác. Một ví dụ là XACT. Tôi nhớ phải phá hủy đối tượng chịu trách nhiệm về nhạc XACT trong sự kiện Unload trong một trường hợp cụ thể mà đối tượng không bị phá hủy bởi GC ... Nhưng tôi đã quên kịch bản thực tế ...

Quan trọng hơn là, Phương thức UnloadContent cho các lớp GameComponent thay vì các lớp Game. Nói chung, các đối tượng GameComponent và DrawableGameComponent có thể sử dụng một số tài nguyên. Khi đối tượng bị phá hủy, bạn phải đảm bảo rằng tất cả các tài nguyên liên quan đến đối tượng đều bị hủy, phát hành hoặc đôi khi được đặt trong trạng thái chờ xử lý.

Tôi khuyên bạn nên để nó ngay bây giờ. Khi bạn tiến lên phía trước với việc phát triển XNA, và đối với các dự án quy mô lớn hơn, bạn có thể cần sử dụng phương thức Unload và hiểu các trường hợp nhất định mà bạn cần.