我正在使用XNA,我遇到了一个小问题。我需要支持多个层,每个层都有一个不同的z顺序(我称之为“视口”)。一张图片胜过千言万语,所以这就是它的样子:
http://www.charlesstrahan.com/so_files/viewports.png
这里有几点需要注意。 Sprite不会在视口之外渲染,正如您在Sprite B中看到的那样。另外,请注意视口的渲染方式 - 它与Photoshop中的“图层”非常相似。虽然Sprite C的z次序为-1000,但C仍然会在Sprite A之上呈现,因为它的视口的z顺序大于A的视口的z顺序。
在上面的图片中,我无法很好地展示最后一个细节。每个视口都需要选择性地在屏幕区域上呈现颜色 - 您可以将其视为“着色”效果。
在使用XNA的最佳方式时,我完全不知所措,所以我真的可以使用一小段C#/ VB.NET代码来演示这一点。任何帮助将不胜感激。
答案 0 :(得分:1)
您可以使用RenderTargets轻松完成此操作:-)有很多关于如何在网络上使用它们的资源(example)。
如果您刚刚启动yoru项目,请考虑安装XNA 4.0(现在通过Windows Phone SDK安装在CTP中)。新版本中的内容变得更加轻松......来自Shawn Hargreaves最近推出的一篇文章 RenderTarget changes in XNA Game Studio 4.0 。
List<Texture2D> textures = new List<Texture2D>();
for (int i = 0; i < 100; i++)
{
RenderTarget2D rt = new RenderTarget2D(...);
GraphicsDevice.SetRenderTarget(rt);
DrawCharacterAnimationFrame(i);
GraphicsDevice.SetRenderTarget(null);
textures.Add(rt);
}
你要问的“着色”功能就是使用这个功能很容易,因为当你用你想要的任何颜色渲染每个渲染目标时,你可以调用Clear方法。
答案 1 :(得分:0)
您可以将对象分组,然后按裁剪顺序渲染每个组
device.ClipPlanes[0].Plane = plane;
device.ClipPlanes[0].IsEnabled = true;