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)