2011-07-27 87 views
-1

我有一個奇怪的問題,我認爲我對XNA框架的相對缺乏知識禁止我修復。XNA新的Texture2D保留舊數據

基本上我有一個Texture2D引用被設置爲一個新的Texture2D實例。在運行期間,它的一些像素被設置,並且這一切都與其在遊戲循環中的繪製非常吻合。

奇怪的是,如果我將引用設置爲null,(它將只繪製,如果不爲null),它按預期不會繪製。

後來,我設置了一個新的Texture2D的引用,它開始繪製它到屏幕。問題是它保存了原始Texture2D對象的所有數據。

編輯

對不起,我清楚之前wasnt。

我所擁有的是這樣的事情...

private Texture2D WorkingTexture {get; set; } 

private void Update() 
{ 
if(some input) 
{ 
    this.WorkingTexture = null; 
} 

if(some other input) 
{ 
    this.WorkingTexture = new Texture2D(this.GraphicsDevice, 500, 500, true, SurfaceFormat.Color); 

    this.WorkingTexture.SetData<Color>(0, new Rectangle((int)vector2.X, (int)vector2.Y, 4, 4), colors, 0, 16); 

    } 
} 

private void Draw() 
{ 
if (this.WorkingTexture != null) 
{ 
    spritebatch.draw(this.WorkingTexture,.....); 
} 
} 

第二個編輯

我還設置一個for循環和手動紋理的每個像素設置爲顏色是後創建。這項工作仍然顯示像素爲我以前設置的顏色。這很奇怪。


請忽略此線程。這個問題非常令人尷尬,我自己也在做。我有一些緩衝了像素的代碼被改變,是的...你猜對了,我沒有清除它,它在新的紋理實例上重新開始工作。

很不好意思....

回答

1

而不必太多的細節去,這聽起來像你想與您前面所做的更改加載的Texture2D。由於您將其設置爲空,所以當您重新加載Texture2D時,它將回到原始狀態。如果您想再次使用它,您需要將對像素所做的更改保存以備將來使用。希望這可以幫助!

1

所以,你已經建立了這樣的

Texture2D texture = Content.Load<Texture2D>("texture_name"); 

紋理,然後應用像這樣

texture = Content.Load<Texture2D>("other_texture_name"); 

右一個新的參考呢?

那不是它是如何應該是。你必須設置你的GraphicsDevice來使用特定的紋理。與BasicEffect類,這將是這樣的:

BasicEffect effect = new BasicEffect(GraphicsDevice); 
effect.Texture = texture; 
effect.CurrentTechnique.Passes[0].Apply(); 
+0

嗨對不起,混淆,我更新了示例代碼的問題。 – Nick

1

你如何創建紋理?如果你從一個資源加載它們(texture = Content.Load(「texture_name」)),那麼你描述的問題聽起來像是一個邏輯錯誤:你的程序沒有按照你認爲的那樣做。跟蹤,調試......

如果要創建全新的紋理(紋理=新的Texture2D(...))這是可能的(未驗證),新的紋理沒有初始化,它的內存空間正在從檢索某種內存池,因此檢索最近標記的處理紋理數據。例如,嘗試在創建紋理數據後立即初始化紋理數據,將其設置爲全黑。

+0

謝謝,是的,我嘗試用一​​種顏色填充紋理,但它沒有區別,就像你在那裏有一個紋理時一樣,無論什麼時候我繪製該引用,它都會繪製,無論Texture2D的哪個實例掛鉤了它。 – Nick