有没有其他方法可以避免为第二个视口重绘

本文关键字:视口 第二个 其他 方法 可以避免 有没有 | 更新日期: 2023-09-27 17:56:32

我必须添加第二个视口(=像分屏)以允许玩家在当前关卡的其他地方看到事件。

是否有可能在不重新绘制所有已经绘制的东西的情况下绘制活动区域?

[编辑]RenderTarget2D是关键。谢谢用户1459910

它几乎奏效了。

新问题 :

  1. 我已经搜索了一段时间,但仍然找不到有关"带有源和目标矩形的Xna 2D相机"的教程,如果您有链接,我想看看,请 ♥
  2. 目前,绘图代码如下所示:

    protected override void Draw(GameTime gameTime)
    {
       /*
       ...
       here is the code to "draw" in the renderTarget2D renderAllScene object
       ...
       */
       //Let's draw into the 2 viewports
       spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.LinearClamp, null, null, null, camera1.transform);
       spriteBatch.Draw(renderAllScene, viewport1.Bounds, Color.White);
       spriteBatch.End();
       if (EventIsRunning)
       {
          spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.LinearClamp, null, null, null, camera2.transform);
          spriteBatch.Draw(renderAllScene, viewport2.Bounds, Color.White);
          spriteBatch.End();
       }
    

*视口 1 很棒。相机跟随角色,但在移动相机一小段距离后,我认为地图被切割为 1280 像素。所以它只绘制了所有地图的 1280 像素。我不知道为什么。也许是因为我在创建 renderAllScene = new RenderTarget2D 时失败了。:x

        renderAllScene = new RenderTarget2D(GraphicsDevice, GraphicsDevice.PresentationParameters.BackBufferWidth, GraphicsDevice.PresentationParameters.BackBufferHeight);

*对于视口 2:我需要源矩形。我明天试试。

有没有其他方法可以避免为第二个视口重绘

我假设你正在制作一个完全没有3D的2D游戏。

以下是您可以执行的操作:

您需要在纹理上渲染整个地图以及出现在地图上的所有游戏对象。如果您不知道如何渲染到纹理,以下是过程:

  1. 创建 RenderTarget2D 对象
  2. 在 Draw 函数上,在渲染任何内容之前,必须调用 graphicsDevice.SetRenderTarget() 方法,并设置您创建的 RenderTarget2D。
  3. 完成渲染后,调用 graphicsDevice.SetRenderTarget(null) 将呈现目标重置为默认目标。你必须这样做,否则你就会有问题!
  4. 要渲染 RenderTarget2D,
  5. 只需使用 SpriteBatch.Draw((Texture2D)renderTarget2D, position, color),当然是"renderTarget2D",当然是您创建的 RenderTarget2D 的名称。

然后,使用两个 2D 摄像机。一个将显示英雄的位置,另一个将显示事件区域。

2D相机基本上是带有源和目标矩形的技巧。诀窍是使用源矩形来定义显示主图的区域及其周围的区域,并使用主视口作为目标矩形,并使用另一个源矩形定义事件区域,使用另一个目标矩形作为第二个视口。

如果你有疑问,谷歌关于"XNA 2D Camera",并在MSDN的文章SpriteBatch.Draw()上研究源和目标矩形。