0

晚上下午;

我开始着手编写一个小定制 2D XNA 引擎供我个人使用。在决定如何绘制 2D 精灵时,我陷入了困境:

首先,我想在某些时候实现一些自定义着色器效果。我在互联网上阅读的每个教程都说我因此被迫使用SpriteSortMode.Immediate,除了一个,它说在 XNA 4.0 中不再需要。

此外,无论阴影效果如何,我都不确定哪种 SpriteSortMode 对我的方法来说是最快的。不同精灵的排序/分层绝对是必要的(即在游戏精灵前面有一个HUD,在背景前面有游戏精灵等);但是实现自定义排序列表并按顺序调用 Draw() 或使用BackToFront / FrontToBack选项会更快吗?

先感谢您。

4

1 回答 1

1

从 XNA 4.0 开始,您可以在任何精灵排序模式下使用自定义着色器效果。XNA 3.1 中的即时精灵排序模式非常糟糕。(见http://blogs.msdn.com/b/shawnhar/archive/2010/04/05/spritesortmode-immediate-in-xna-game-studio-4-0.aspx

关于排序,我会说将它们从前排序以获取透明精灵,从前到后排序以获取不透明精灵。请参阅:http: //msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.spritesortmode.aspx
那里有一种额外有趣的模式(至少对于 2D 引擎而言),即纹理排序模式,它对需要纹理的绘制调用进行排序,从而减少状态变化。对于主要游戏精灵来说,这可能是一个巨大的性能胜利。

除非您的分析器另有说明,否则我不会太担心性能。SpriteBatch 做了很多批处理(是的,真的),这将是最大的性能改进,因为它最大限度地减少了状态更改的数量。

我能想到的提高性能的唯一其他方法是使用实​​例化,但我认为使用 XNA 可能是个坏主意(理想情况下,您至少需要 SM3.0 硬件和自定义顶点着色器;我不是确定如何与 SpriteBatch 类一起使用)。

于 2012-05-27T00:20:59.170 回答