新添加的这些函数使得程序员可以根据需要旋转和缩放精灵。它们的开销更高一些,但是把这些函数转移到3D模型中很简单。可以对这些函数进行整理和缩减,以获得性能提升。
8.5.9 优化
将注意力放到游戏上,只在必要时进行优化,这一点十分重要。对于大多数游戏,Matrix类已经足够快,但是程序员都很喜欢进行优化,下面就此给出了一些提示。矩阵涉及大量运算,所以减少矩阵的使用量一般来说是一个好主意。优化程度最高的代码是从不会运行的代码。
现在,每个精灵由两个三角形组成,总共有6个顶点,但是实际上,用4个顶点就可以创建一个精灵。在这一方面,一个不错的起点是查阅OpenGL文档中的索引缓冲区函数。
现代CPU使用专门的硬件SIMD(Single Instruction, Multiple Data,单指令多数据)来执行矩阵和向量运算。SIMD指令会显著增加矩阵计算的速度。但是,在编写本书时,只有C#的Mono实现支持SIMD操作。
大多数测试程序都会在调试模式下生成,发布模式要快得多。如果在Solution Explorer中右击项目名称并在弹出的快捷菜单中选择Properties命令,还可以使用其中的一个选项来打开优化。
垃圾回收是使C#比C++这样的语言更慢的一项特性。避免垃圾回收导致速度变慢的最佳方式是减少主循环中创建的对象数量。每当使用关键字new时,就创建了一个对象。最好是在构造函数中创建对象一次,或者将对象定义为某个对象的成员,而不是在处理循环或者渲染循环中创建它。
一些矩阵操作会创建矩阵。这使得它们更加易于使用,对象创建也被优化了,但是还可以使它们更加高效。在调试时,右击窗口后在弹出的快捷菜单中有一个命令Go to Disassembly。这会显示每一行C#代码生成的IL(intermediate Language,中间语言)。IL指令数越少,代码运行得越快,前提是发布生成优化没有移除这些IL指令。遗憾的是,反汇编中不会显示编译器执行的任何优化。