所以我知道标题可能有点含糊,所以我将尝试解释我的意思。基本上我想要完成的是绘制许多不同的对象和图像,但是在一种缓冲区中,这样我以后可以使用绘图函数只绘制这个缓冲区的一部分。
我正在尝试在 MonoGame 中制作滚动功能,就像 WinForms 中的水平/垂直滑块控件一样,并且我得到了一个滑块工作。我想要的是让滑块准确地切断此滑块窗口内的其他控件。
现在我明白我想要完成的事情RenderTarget2D
就是存在的,当我尝试使用它时,我发现让它做我想做的事情非常困难。我现在的主要问题是,当我在 中绘制某些东西时RenderTarget
,一旦我设置了它就会清除其他所有内容SetRenderTarget(null)
(以便我再次在游戏窗口上绘制)。
长话短说,以下代码在我执行RenderTarget2D
代码之后绘制了所有内容,但清除了之前的所有内容。
protected override void Draw(GameTime gameTime)
{
_spriteBatch.Begin();
_spriteBatch.DrawString(font, "Prior", Vector2.Zero, Color.White);
_spriteBatch.End();
RenderTarget2D target = new RenderTarget2D(GraphicsDevice, 320, 110, false, SurfaceFormat.Color, DepthFormat.None, 0, RenderTargetUsage.PreserveContents);
GraphicsDevice.SetRenderTarget(target);
_spriteBatch.Begin();
_spriteBatch.DrawString(font, "Middle", new Vector2(0, 120), Color.White);
_spriteBatch.End();
GraphicsDevice.SetRenderTarget(null);
_spriteBatch.Begin();
_spriteBatch.Draw(target, new Vector2(0, 120), Color.White);
_spriteBatch.DrawString(font, "Past", new Vector2(0, 240), Color.White);
_spriteBatch.End();
base.Draw(gameTime);
}
另外,我有这些:
public Game1()
: base()
{
_graphics = new GraphicsDeviceManager(this);
_graphics.PreparingDeviceSettings += OnPreparingDeviceSettings;
Content.RootDirectory = "Content";
}
private void OnPreparingDeviceSettings(object sender, PreparingDeviceSettingsEventArgs e)
{
e.GraphicsDeviceInformation.PresentationParameters.RenderTargetUsage = RenderTargetUsage.PreserveContents;
}
我无法想象最后一点有多重要,但我想我不妨添加一点太多而不是太少一点。
是的,所以如果有人知道可能出了什么问题,我真的很想知道,因为现在我一直在查看这段代码并试图弄清楚它的头部和尾部大约 5 个小时左右,而我似乎一点进展都没有。
谢谢