2012-10-06 29 views
6

Tamam, işte başlıyoruz. Bir uygulama yapmaya çalışıyorum, XNA'yı oluşturucusu nedeniyle taban olarak kullanıyorum. Bu projede gerekli olan şeylerden biri, ayrı bir XNA oluşturma panelinin gömülü olduğu yeni bir pencerenin (bir iletişim kutusu olarak) açılmasıdır. Bunu etkileşimli bir önizleme paneli olarak kullanıyorum, bu yüzden orada işlemek için XNA'ya ihtiyacım var. Bununla birlikte, XNA'nın bunu yapmak için çok iyi bir donanımı yok gibi görünüyor. Ben kendim çeşitli şeyler denedim, ama hiçbir boşuna (ya hata üretiyor ve doğru bir şekilde işlenmiyor ya da yanlış en/boy oranında render ediliyor). Normalde, buraya kod gönderirdim, ama çok az şansım olduğu için, yayınlanacak çok şey yok.XNA with Windows Forms - Yeni pencerede aç

Uygulamam şu anda bir Form içine gömülü bir XNA uygulamasından oluşur ve önizleme panelini açmak için bir düğmem vardır. Bu, teoride, XNA oluşturucuyu içeren bir Form Dialog olarak açılır; Ön izleme. Bunu birkaç saat boyunca denedim ve hiçbir yere gitmedim, bu yüzden burada biraz yardım istiyorum.

Yine de teşekkürler.

DÜZENLEME: Tamam, biraz ilerleme kaydettim ama 2 sorunum var. İlk olarak, bir sprite partisi ile çizilmiş herhangi bir doku doğru boyutlarda görünür, ancak katı siyahla doldurulur. Ayrıca, iletişim kutusunu açıp kapatıp uygulamayı kapattığımda bir AccessViolationException alıyorum. İki hata bir şekilde bağlantılı olduğundan şüpheleniyorum.

Kodum önizleme iletişim kutusunu başlatıyor. (a, esasen, Texture2D nesnelerinin bir Bağlantılı Listesinden oluşan özel bir sınıftır).

animPrev = new AnimationPreview(a); 
animPrev.Show(); 

My AnimationPreview Forms sınıfının bir uzantısıdır ve XNA Win numunede bulunan GraphicsDeviceControl bir uzantısı olan bir PreviewControl nesnesi içerir. Ana formumun çeşitli sebeplerden dolayı XNA Game sınıfını genişletdiğini unutmayın.

PreviewControl nesne böyle kurulur:

protected override void Initialize() 
{ 
    sb = new SpriteBatch(GraphicsDevice); 
    Application.Idle += delegate { Invalidate(); }; 
} 

Ve Beraberlik yöntemi içerir: Bu beklendiği gibi form menekşe arka planını temizler ve siyah bir kutu çizer

protected override void Draw() 
{ 
    GraphicsDevice.Clear(Microsoft.Xna.Framework.Graphics.Color.Violet); 
    if (frame != null) 
    { 
     sb.Begin(); 
     sb.Draw(Image, Vector2.Zero, Color.White); 
     sb.End(); 
    } 
} 

Resim ile aynı boyutta. Bu beklenmiyor. Umarım birisi bana yardım edebilir.

NOT: XNA Texture2D nesnelerini System.Drawing.Image nesnelerine dönüştürmek kabul edilebilir bir alternatif olabilir. Ancak, XNA 3.1 kullanıyorum, bu yüzden dokuyu bir akışa kaydedemiyorum ve yeniden yükleyemiyorum. Aslında, bunu denedikten sonra, biraz tehlikeli ve çok yavaş, bu yüzden bu şekilde yapmamayı tercih ediyorum.

+2

[XNA WinForms Örneği] kullanıyor musunuz (http://xbox.create.msdn.com/en-US/sample/winforms_series1)? (Çünkü, eğer değilse, bu adım # 1 olacaktır.) –

+0

Hayır, ona bir bakacağım. – Hoeloe

+0

Hmm ...Bu neredeyse aradığım şey gibi görünüyor, ancak bir güncelleme döngüsü içermiyor gibi görünüyor sorun var. Şu andaki ana formum, bir Form nesnesinin tanıtıcısıyla bir Oyun sınıfıdır. Bu yeni pencerede güncellemeyi kullanmalı ve döngüler çizmeliyim. – Hoeloe

cevap

İlgili konular