DirectX游戏编程与C# - 写在前面
DirectX是一个赐予软件开发者使用标准接口来编写高性能应用程序的丰富多媒体的API。第一个版本的DirectX是随着Windows95发布的,在当时被称为“Games SDK”。从那时开始到如今已经发布了多达8个版本。这些API的设计都是为了C和C++的软件开发员们。可惜在这个整个开发群中没有一个开发者认为可以很轻松的使用上DirectX所提供的功能。
实事上DirectX的开发小组也希望简化DirectX程序开发的复杂问题。于是这个奇迹诞生了。在2002年十二月20号第一版本的Managed DirectX跟随在DirectX9。0中出现了。实际上这个计划已经酝酿相当一段长的时间。在DirectX8。1工程开发周期的末期,那时许多开发员们都在努力于为Visual Basic编程的DirectX工作。第一个测试版的Visual Studio。Net和。NET runtime已经出现。很明显。NET将成为我们将来的开发工具。这时候DirectX。NET雏形已经开始诞生,到了最后成为了我们现在的Managed DirectX。
从最开始Managed DirectX设计的就和“core”API一样强大。在过去VB中编写DirectX总是无法编写出和DirectX API一样质量的应用程序,可以说甚至无法比较。开发者一直在尝试移除这些瓶颈。经过了很多工作之后的确使之性能得到一定的提高,但所做的全部就是使更复杂于API,尤其是对于VB的开发员们。当DirectX8发布后,被显示出不容易使用,即使是样例代码也让人很难跟随上代码流程。那些代码看上去就不像普通的VB的应用程序。大部分的Visual Basic开发员认为API过于复杂使用。既然如此C++的开发员们没有任何理由在没有利益的情况下转换他们的开发语言。在新的API中指出了这些问题。它必须要快速,必须容易使用并且给出一个很吸引人的原因让C++程序员把他们曾经写过的代码转换到新的中来。Managed DirectX概念就是在这之上诞生,现在我们要做的就是使用它。
在2002年的游戏开发者大会上(在San Jose举行),第一个版本的Managed DirectX被发布,当时这个版本还建筑于DirectX8.1 runtime之上,并且专用于C#。其中包括大部分的DirectX的核心组件。(里面包括DirectX Music组件,当最终版本发布时被移除)当时这个版本已经开发的相当成功,大部分反馈都是正面的,在最好的情况下已经和原始API性能完全一样,可惜在通常的例子中都要比C++原始代码的运行速度慢60%。看来还仍然有许多工作要做。
几个月后第二版本已经完成,也就是跟随着DirectX9的beta版一起发布的。这时所有主要的性能瓶颈问题已经解决并且添加了DirectX.DirectDraw组件,和同时移除了DirectX.Music组件。这时更多使用Managed Code的C#开发者加入了测试。很快不少反馈已经回来,性能的问题的确得到改善,问题是这些Managed DirectX的代码却和其他的Managed API代码看起来完全不同,更确切的说它更像COM API代码。Managed DirectX的目标是没有变的。让它运行的更快,让它更容易使用。
在Beta1版之后API被完全重新设计。DirectX开发小组和。NET runtime开发组经过相当的交流,并且和许多beta版的用户长谈。同时DirectX开发小组在收集所有关于现在版本设计错误原因的反馈。随即之后Beta2版被推出。这一次的反馈大大在预计之中,看来Managed DirectX的开发道路是走的正确的。在DirectX9最终版发布前的一个月,一个beta版本已经发布与公众,其中只包括DirectX runtime,并不是一个完整的SDK,但是已经包括了Managed DirectX API。在没有任何示例和文档的情况下,热情的程序员们对这个新生事物仍然努力找出它的使用方法,测试着它的潜力。它终于开始得到使用了,所有的反馈都是在说明它的优点。人们发布的如何使用API的文章在网络上随处可见。最终到十二月正式版的Managed DirectX正式发布。
Managed DirectX命名空间
Managed DirectX API根据核心组件的功能来划分有一组很明显的命名空间,在Microsoft.DirectX 命名空间中包括常用的功能。完整的命名空间列表在下面“表-1”中。
Managed DirectX 命名空间
Mcirosoft.DirectX 基类命名空间,包括所以通常代码。
Microsoft.DirectX.Direct3D Direct3D图形API,包括D3DX帮助类库。
Microsoft.DirectX.DirectDraw DirectDraw图形API。
Microsoft.DirectX.DirectPlay DirectPlay网络API。
Microsoft.DirectX.DirectSound DirectSound声音API。
Microsoft.DirectX.DirectInput DirectInput用户输入API。
Microsoft.DirectX.AudioVideoPlayback 声音和影像播放API。
Microsoft.DirectX.Diagnostics 诊断API。
Mcirosoft.DirectX.Security DirectX底层代码访问安全。
Microsoft.DirectX.Security.Permissions DirectX代码访问安全权限。
表-1
如表所示,大部分DirectX的功能包括在这些命名空间内。在本书中将会主要讲解使用2D的 DirectX.DirectDraw和3D的Direct3D命名空间。同时也概括其余的部分。
准备开始
当我们准备开始编写Managed DirectX应用程序之前要先做一些准备工作。
首先你需要一个代码编辑器和运行环境,这里建议你使用Visual Studio。NET 2003并且你的系统已经装载了。NET runtime 1。1的版本。通常。NET runtime 1。1会自动跟随着Visual Studio。NET 2003一起装载到你的系统之中。在本书的CD代码全部是由Visual Studio。NET 2003所产生的方案。
下一步你需要装载DirectX9。0 SDK Update(summer 2003 update)你可以通过Microsoft的网站下载( http://www.microsoft.com/windows ... 有使用过DirectX SDK不用着急,在开始的章节中会讲解全部的装载过程。
本书中开始的章节的例子基本可以运行在任何一块现代显卡上。在后面一些章节会需要较高级的显卡来实现。Geforce4或以上的显卡都可以很好的支持。但是这里仍然建议你选用有能力支持shader model 2。0的显卡(比如Radeom9700或者更好)
本书面向的读者是那些已经掌握基本编程知识,并且对。NET以及C#有一定了解。希望开始向游戏和多媒体动画方向发展。如果你是一个刚开始学习编程的用户可能你可能会发现本书不十分适合你。本书将会从DirectX基础开始,阐述如何进行2D图像编程,到3D图像编程,如何向你的应用程序中添加音乐,播放影视。如何使用键盘,游戏手柄,鼠标以及其他输入设备。最后解释如果在应用程序中添加网络功能。
实事上DirectX的开发小组也希望简化DirectX程序开发的复杂问题。于是这个奇迹诞生了。在2002年十二月20号第一版本的Managed DirectX跟随在DirectX9。0中出现了。实际上这个计划已经酝酿相当一段长的时间。在DirectX8。1工程开发周期的末期,那时许多开发员们都在努力于为Visual Basic编程的DirectX工作。第一个测试版的Visual Studio。Net和。NET runtime已经出现。很明显。NET将成为我们将来的开发工具。这时候DirectX。NET雏形已经开始诞生,到了最后成为了我们现在的Managed DirectX。
从最开始Managed DirectX设计的就和“core”API一样强大。在过去VB中编写DirectX总是无法编写出和DirectX API一样质量的应用程序,可以说甚至无法比较。开发者一直在尝试移除这些瓶颈。经过了很多工作之后的确使之性能得到一定的提高,但所做的全部就是使更复杂于API,尤其是对于VB的开发员们。当DirectX8发布后,被显示出不容易使用,即使是样例代码也让人很难跟随上代码流程。那些代码看上去就不像普通的VB的应用程序。大部分的Visual Basic开发员认为API过于复杂使用。既然如此C++的开发员们没有任何理由在没有利益的情况下转换他们的开发语言。在新的API中指出了这些问题。它必须要快速,必须容易使用并且给出一个很吸引人的原因让C++程序员把他们曾经写过的代码转换到新的中来。Managed DirectX概念就是在这之上诞生,现在我们要做的就是使用它。
在2002年的游戏开发者大会上(在San Jose举行),第一个版本的Managed DirectX被发布,当时这个版本还建筑于DirectX8.1 runtime之上,并且专用于C#。其中包括大部分的DirectX的核心组件。(里面包括DirectX Music组件,当最终版本发布时被移除)当时这个版本已经开发的相当成功,大部分反馈都是正面的,在最好的情况下已经和原始API性能完全一样,可惜在通常的例子中都要比C++原始代码的运行速度慢60%。看来还仍然有许多工作要做。
几个月后第二版本已经完成,也就是跟随着DirectX9的beta版一起发布的。这时所有主要的性能瓶颈问题已经解决并且添加了DirectX.DirectDraw组件,和同时移除了DirectX.Music组件。这时更多使用Managed Code的C#开发者加入了测试。很快不少反馈已经回来,性能的问题的确得到改善,问题是这些Managed DirectX的代码却和其他的Managed API代码看起来完全不同,更确切的说它更像COM API代码。Managed DirectX的目标是没有变的。让它运行的更快,让它更容易使用。
在Beta1版之后API被完全重新设计。DirectX开发小组和。NET runtime开发组经过相当的交流,并且和许多beta版的用户长谈。同时DirectX开发小组在收集所有关于现在版本设计错误原因的反馈。随即之后Beta2版被推出。这一次的反馈大大在预计之中,看来Managed DirectX的开发道路是走的正确的。在DirectX9最终版发布前的一个月,一个beta版本已经发布与公众,其中只包括DirectX runtime,并不是一个完整的SDK,但是已经包括了Managed DirectX API。在没有任何示例和文档的情况下,热情的程序员们对这个新生事物仍然努力找出它的使用方法,测试着它的潜力。它终于开始得到使用了,所有的反馈都是在说明它的优点。人们发布的如何使用API的文章在网络上随处可见。最终到十二月正式版的Managed DirectX正式发布。
Managed DirectX命名空间
Managed DirectX API根据核心组件的功能来划分有一组很明显的命名空间,在Microsoft.DirectX 命名空间中包括常用的功能。完整的命名空间列表在下面“表-1”中。
Managed DirectX 命名空间
Mcirosoft.DirectX 基类命名空间,包括所以通常代码。
Microsoft.DirectX.Direct3D Direct3D图形API,包括D3DX帮助类库。
Microsoft.DirectX.DirectDraw DirectDraw图形API。
Microsoft.DirectX.DirectPlay DirectPlay网络API。
Microsoft.DirectX.DirectSound DirectSound声音API。
Microsoft.DirectX.DirectInput DirectInput用户输入API。
Microsoft.DirectX.AudioVideoPlayback 声音和影像播放API。
Microsoft.DirectX.Diagnostics 诊断API。
Mcirosoft.DirectX.Security DirectX底层代码访问安全。
Microsoft.DirectX.Security.Permissions DirectX代码访问安全权限。
表-1
如表所示,大部分DirectX的功能包括在这些命名空间内。在本书中将会主要讲解使用2D的 DirectX.DirectDraw和3D的Direct3D命名空间。同时也概括其余的部分。
准备开始
当我们准备开始编写Managed DirectX应用程序之前要先做一些准备工作。
首先你需要一个代码编辑器和运行环境,这里建议你使用Visual Studio。NET 2003并且你的系统已经装载了。NET runtime 1。1的版本。通常。NET runtime 1。1会自动跟随着Visual Studio。NET 2003一起装载到你的系统之中。在本书的CD代码全部是由Visual Studio。NET 2003所产生的方案。
下一步你需要装载DirectX9。0 SDK Update(summer 2003 update)你可以通过Microsoft的网站下载( http://www.microsoft.com/windows ... 有使用过DirectX SDK不用着急,在开始的章节中会讲解全部的装载过程。
本书中开始的章节的例子基本可以运行在任何一块现代显卡上。在后面一些章节会需要较高级的显卡来实现。Geforce4或以上的显卡都可以很好的支持。但是这里仍然建议你选用有能力支持shader model 2。0的显卡(比如Radeom9700或者更好)
本书面向的读者是那些已经掌握基本编程知识,并且对。NET以及C#有一定了解。希望开始向游戏和多媒体动画方向发展。如果你是一个刚开始学习编程的用户可能你可能会发现本书不十分适合你。本书将会从DirectX基础开始,阐述如何进行2D图像编程,到3D图像编程,如何向你的应用程序中添加音乐,播放影视。如何使用键盘,游戏手柄,鼠标以及其他输入设备。最后解释如果在应用程序中添加网络功能。