2016-11-10 23 views
0

這裏是一個平局塊:SpriteBatch將繪製到backbuffer而不是RenderTarget?

graphicsDevice.Clear(Color.CornFlowerBlue); 
spriteBatch.Begin(); 
graphicsDevice.SetRenderTarget(renderTarget); 
spriteBatch.Draw(texture2D, position, etc); 
graphicsDevice.SetRenderTarget(null); 
graphicsDevice.Clear(Color.Red); 
spriteBatch.End(); 

這將產生一個紅色的背景上我的Texture2D。爲什麼這會將我的Texture2D繪製到屏幕上?當調用spriteBatch.Draw時,RenderTarget不是後臺緩衝區,並且我沒有在此代碼中繪製RenderTarget。不應該由於它被拖出屏幕而不顯示texture2D?另外,爲什麼沒有顯示(只是黑色),除非我在結束spriteBatch之前清除屏幕?

回答

1

嘗試安排這樣的源代碼,

graphicsDevice.Clear(Color.CornFlowerBlue); 
graphicsDevice.SetRenderTarget(renderTarget); 
spriteBatch.Begin(); 
spriteBatch.Draw(texture2D, position, etc); 
spriteBatch.End(); 

從我的經驗,你需要設置渲染目標之前,你真正開始與精靈批量繪製。

至於爲什麼你的後臺緩衝區在你完成後是黑色的,這是因爲.SetRenderTarget(null);清除了後臺緩衝區以及渲染目標,這就是爲什麼屏幕顯示黑色(沒有)。你應該先做所有的RenderTarget繪圖,當你切換回後臺緩衝區時,它不會擦除任何東西。

+0

好的,但爲什麼在我的倒數第二行中清除GraphicsDevice會導致屏幕從我的紋理繪製到黑色到紅色? – GameKyuubi

+0

這是關於你的代碼的排序,你清理並填充屏幕之前,你結束了你的精靈批處理,這實際上是繪製精靈畫面。 – XerShade

+0

對,但在我的代碼中,End()之前做的最後一件事是Clear(),但不知何故,我的Texture2D仍然可見。它會改變背景顏色,但不會刪除Texture2D。 – GameKyuubi

相關問題