我的问题是我试图将两个不同的 RenderTarget2D 绘制到屏幕上,但只显示最后绘制的一个。该代码类似于以下代码,并被调用两次,一次由需要使用该Draw
方法绘制的类的每个实例调用:
public override void Draw()
{
gfxDevice.SetRenderTarget(myRenderTarget);
gfxDevice.Clear(Thistle);
//pseudocode
foreach (something in a list)
{ spritebatch.begin();
spritebatch.DrawString(something);
spritebatch.end();
}
//reset to the backbuffer
gfxDevice.SetRenderTarget(null);
gfxDevice.Clear(backgroundColor) //Here is what I thought the offending line was
//draw the RenderTarget to backbuffer
spriteBatch.Begin();
spriteBatch.Draw(myRenderTarget, rect, this.backgroundColor);
spriteBatch.End();
我认为解决方案是在graphicsDevice
每次Draw()
调用该方法时停止清除,但如果我不这样做,除了新绘制的渲染目标之外的所有东西都会被绘制成丑陋的紫色。像这样:
由于这个问题End()
,我认为紫色是精灵批处理的结果
为了正确绘制两个 RenderTargets,我需要更改什么,这意味着两个小部件都被绘制,以及正确的Color.Thistle
背景?
理想情况下,屏幕看起来像两者的组合:和