在紫色屏幕中更改RenderTarget结果?

我试图在运行时更改RenderTargets,因此我可以在运行时绘制一些元素,操纵它们,然后最终将纹理绘制到屏幕上。 问题是,如果我在运行时更改RenderTarget,屏幕会变为紫色。 这是我在Draw中得到的代码:

RenderTarget2D tempTarget = new RenderTarget2D(GraphicsDevice, 128, 128, 1, GraphicsDevice.DisplayMode.Format, GraphicsDevice.PresentationParameters.MultiSampleType, GraphicsDevice.PresentationParameters.MultiSampleQuality, RenderTargetUsage.PreserveContents); GraphicsDevice.SetRenderTarget(0, tempTarget); GraphicsDevice.Clear(ClearOptions.Target, Color.SpringGreen, 0, 0); GraphicsDevice.SetRenderTarget(0, null); 

如果我在运行时创建RenderTarget似乎并不重要(我确实需要在运行时创建内存中的纹理并使用SpriteBatch绘制它们),这会导致完全紫色的屏幕。 我该怎么做才能解决这个问题?

看起来最好的选择是在Draw之外的某处创建RenderTarget,在Update期间绘制它,保存生成的纹理(并根据需要进行操作),然后在Draw期间绘制该纹理。

我知道这已经很晚了,但解决方案是在清除屏幕并开始绘制其他项目之前写入RenderTarget。

 protected override void Draw(GameTime gameTime) { GraphicsDevice.SetRenderTarget(_renderTarget); //... //Perform Rendering to the specified target //... GraphicsDevice.SetRenderTarget(null); GraphicsDevice.Clear(Color.CornflowerBlue); //... //Code that draws to the users screen goes here //... } 

这应该会阻止您按照其他人的建议在Update方法中呈现,这在许多方面都是违反直觉的。

spritebatch.End()被调用时,对象被写入后备缓冲区或者你的情况下写入tempTarget 。 要制作纹理,

  • 改变目标
  • 打电话开始
  • 打电话给所有的抽奖
  • 结束spritebatch
  • 将目标设置为null

然后使用render2d