2016-11-10 45 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

相关问题