我必须添加第二个视口(=类似于分屏),以允许玩家在当前级别的其他位置查看事件。
是否有可能绘制事件区域而不重绘已绘制的所有内容?
[编辑] RenderTarget2D是关键。 Thx User1459910适用于所有人。
它几乎奏效了。
新问题:
目前,绘图代码如下所示:
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();
}
* Viewport 1很棒。相机跟随角色,但在移动相机一小段距离后,我认为地图切割为1280像素。所以它只绘制了所有地图的1280个像素。我不知道为什么。也许是因为我在创建renderAllScene = new RenderTarget2D时失败了。 :X
renderAllScene = new RenderTarget2D(GraphicsDevice, GraphicsDevice.PresentationParameters.BackBufferWidth, GraphicsDevice.PresentationParameters.BackBufferHeight);
*对于视口2:我需要源矩形。我明天会试试。
答案 0 :(得分:1)
我会假设你正在制作一部没有3D的2D游戏。
以下是您可以做的事情:
您需要在纹理上渲染整个地图以及出现在其上的所有游戏对象。如果您不知道如何渲染到纹理,请执行以下步骤:
然后,您使用两个2D相机。一个将显示英雄的位置,另一个将显示事件区域。
2D相机基本上是源和目标矩形的技巧。诀窍是使用源矩形来定义显示英雄及其周围区域的区域,并使用主视口作为目标矩形,并使用另一个源矩形来定义事件区域,使用另一个目标矩形作为第二个视口。
如果您有疑问,请关注“XNA 2D相机”,并在MSDN的SpriteBatch.Draw()文章中研究源和目标矩形。