2010-04-07 33 views
6

XNA oyunları, içeriğin kaldırılması gereken bir Unload() yöntemine sahiptir. Ama bunun amacı nedir? Tüm içerikler kaldırılıyorsa, oyun çıkmalı, bu durumda her şey zaten çöp toplanacaktı, değil mi?XNA: Unload() noktasının amacı nedir?

cevap

6

Anladığım kadarıyla, herhangi bir standart kullanım için yararlı değildir, zira çöp toplayıcısının sizin için bir şeylerle uğraştığını söylediğiniz gibi. Bununla birlikte, oyununuzun birçok şey için çıktığı sırada çağrılan bir etkinliğe sahip olmanız yararlıdır. Örneğin, çok oyunculu bir oyunda tüm istemcilere bir mesaj göndererek onları çıktığınızı söyleyin ve sonra çöp toplayıcısının ağ bağlantılarınızı öldürmesine izin verebilirsiniz. Özellikle Çöp Toplayıcı üzerinden boşaltılamayan kitaplıklarla çalışırken, bazen boşaltma yapılması gerekir (

).
+1

Programınızı kapattığınızda tüm nesneleriniz boşaltılacağı için, 'IDisposable.Dispose()' veya '(())' yi kullanmamalısınız anlamına gelmez. –

+0

Bu iyi bir nokta. – Martin

+0

Bunu başarmak için korumalı Game1.OnExiting olay yöntemini geçersiz kılabilirsiniz. Örneğin, oyun kapanırken bir mesaj göndermek için OnExiting kullanmak daha mantıklı. –

2

Kendinizi temizlemekten her zaman istekli olursunuz… aksi halde insanlar oyuncaklarıyla oynamanıza izin vermezler.

En iyi tahminim, projenize Game nesnesini yerleştirmenize ve bunları daha sonra temizlemenize olanak sağlamasıdır. Bu, kodunuzun daha iyi yeniden kullanılmasına izin verir. Umarım bir XNA MPV veya XNA ekibinden bir kişi bunu bulacaktır ve daha fazla bilgi sağlayacaktır.

+0

"Sonraki" a 'Oyun' nesnesi ne anlama geliyor? –

+0

Bu demektir ki şişman 'yuva' parmaklıyorum ... teşekkürler, ben tamir edeceğim. –

+1

O zaman bile o kadar da kullanışlı değil, her şeyden önce oyun nesnesi çöp toplandığında, içerik yöneticisi toplanacak ve böylece tüm içeriği yönetecek. – Martin

1
. Bir örnek XACT. Nesnenin GC tarafından yok edilmediği özel bir durumda Unload olayındaki XACT müziğinden sorumlu nesneyi yok etmek zorunda olduğumu hatırlıyorum ... Ama gerçek senaryoyu unutmuştum ...

Daha da önemlisi, Oyun sınıfları yerine GameComponent sınıfları için UnloadContent yöntemi. Genel olarak, GameComponent ve DrawableGameComponent nesneleri çeşitli kaynaklardan yararlanabilir. Nesne imha edildiğinde, nesneyle ilgili tüm kaynakların yok edildiğini, serbest bırakıldığını veya bazen bekleyen duruma getirildiğinden emin olmanız gerekir.

Şimdilik onu bırakmanızı öneririm. XNA geliştirme ile ilerlerken ve daha büyük ölçekli projeler için, Boşaltma yöntemini kullanmanız ve ihtiyacınız olan belirli durumları anlamanız gerekebilir.