Yandex.Metrica
XNA 4.0 ile TextureUsage Hatası

XNA 4.0 ile birlikte TextureUsage Hatası


              Visual Studio 2008 ile geliştirdiğiniz XNA projesini VS 2010 Express for Windows Phone veya Visual Studio 2012 ve üstü sürümleri üzerinde çalıştırmayı denediğinizde karşılaşabileceğiniz bir hataya göz atacağız.(XNA sürümlerinden dolayı)

Ben oyunumda oyun içi sprite ların herhangi bir hasar aldıklarında yüzeylerinin beyaz olduğu bir sistem kullanıyorum.Bunun için kullandığım metot aşağıda ki gibi

 

                 public Texture2D MakeDamageTexture(Texture2D texture)

        {

            int pixelCount = texture.Width * texture.Height;

            Color[] pixels = new Color[pixelCount];

            texture.GetData<Color>(pixels);

            for (int i = 0; i < pixels.Length; i++)

            {

                byte offset = 200;

                byte r = (byte)Math.Min(pixels[i].R + offset, 255);

                byte g = (byte)Math.Min(pixels[i].R + offset, 255);

                byte b = (byte)Math.Min(pixels[i].R + offset, 255);

                pixels[i] = new Color(r, g, b, pixels[i].A);

            }

 

            Texture2D outTexture = new Texture2D(Globals.Graphics.GraphicsDevice, texture.Width, texture.Height, 1, TextureUsage.None, SurfaceFormat.Color);

            outTexture.SetData<Color>(pixels);

            return outTexture;

        }

 

             Burada yeni bir Texture2D nesnesi oluştururken XNA 3.1 ile yazdığımız kodda

Texture2D yapıcı fonksiyonu Texture2D(GraphicsDevice graphicsDevice,Int32 width,Int32 height,Int32 numberLevels,TextureUsage usage,SurfaceFormat format) şeklindedir.XNA 4.0 ile birlikte projemizi derlediğimizde VS  TextureUsage diye bir sınıfın olmadığını acaba bir şeyleri unutup unutmadığımızı sormaktadır.Çözüm olarak Texture2D sınıfının yeni yapıcı fonksiyonunu kullanarak hatadan sıyrılmayı başarıyoruz.


XNA 3.1 ile

Texture2D(GraphicsDevice graphicsDevice,Int32 width,Int32 height,Int32 numberLevels,TextureUsage usage,SurfaceFormat format)

XNA 4.0 ile

Texture2D(GraphicsDevice graphicsDevice,Int32 width,Int32 height,bool bipmap,SurfaceFormat format)

Eski Kod

Texture2D outTexture = new Texture2D(Globals.Graphics.GraphicsDevice, texture.Width, texture.Height, 1, TextureUsage.None, SurfaceFormat.Color);

Yeni kod

 

Texture2D outTexture = new Texture2D(Globals.Graphics.GraphicsDevice, texture.Width, texture.Height,false,SurfaceFormat.Color);

 

 

           Yalnız bu şekilde hatadan kurtuluyoruz fakat oyunum istediğim gibi çalışmıyor diyebilirim.Oyun içinde ki sprite lar hasar aldıklarında aşağıda ki gibi büyük beyaz kare şeklinde hasar dokusu çizdirilmekteydi.


 

Çözüm :

Eski Kod:

SpriteBatch.Begin( );

DrawFunction( );

SpriteBatch.End( );

Yeni Kod:

            SpriteBatch.Begin( SpriteSortMode.Deferred,BlendState.NonPremultiplied);

            DrawFunction( );

            SpriteBatch.End( );


Comments(0):
Bu yazı için henüz bir yorum yapılmamış
Yorum yapabilmeniz için üye olmanız gerekmektedir,(Giriş Yap|| Üye Ol)