C编写3D游戏框架示例

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Visual C#编写3D游戏框架示例

在本文中,我假定你的所有开发工作都将使用Visual Studio .NET 2003来完成

public class GameEngine : IDeviceCreation

{

///程序入口。初始化所有部分并进入一个消息处理循环。用空闲时间显示场景

static int Main()

{

using(Framework sampleFramework = new Framework())

{

return sampleFramework.ExitCode;

}

}

}

这段新代码中有三个地方比较突出。首先,你可能注意到了除了静态的main方法之外,删除了所有东西,而且main方法也被修改过。剩余的代码是Windows窗体设计器的支撑代码。由于这个应用程序不需要使用该设计器,因此这些代码就没有用了,可以被删除。其次,这段代码不能编译,因为游戏引擎希望实现的两个接口还未实现。再次,这段代码实际上没有做任何事务。

在你开始解决后面两个问题之前,你必须添加一些引用。由于你准备在这个项目中显示奇特的3D图像,你就必须给项目添加能执行这样的显示操作的组件的引用。本文采用受控DirectX来执行这种操作,因此你需要在"项目"菜单中选择"添加引用"。图1显示了弹出的对话框。

图1:添加引用对话框

G Green

B Blue

X Unused

你可以查看DirectX SDK文档得到更多关于格式的信息。由于我们还需要知道该设备时候可以显示在窗体中,所以这个方法还有一个参数(最后一个)。尽管大多数游戏都运行在全屏模式下,但是编写和调试在全屏模式下运行的游戏却很困难。在调试过程中,这个应用程序在窗体模式而不是全屏模式下显示。

请注意

窗体模式是我们运行的大多数应用程序的显示方式。其中大多数应用程序带有边框和控制菜单,右上角带有最小化、最大化和关闭按钮。在全屏模式下,应用程序覆盖了整个屏幕,并且在大多数情

况下没有边框。如果全屏模式使用了另外的屏幕大小(你当前使用的桌面),你可以改变桌面的分辨

率。

你可能注意到了默认行为是接受该设备,但是在接受之前进行了两项检查。第一项检查确保了传递进来的设备可以进行alpha混合(游戏的用户界面需要这个),如果它不能够实现,就返回false表明这个设备不能被接受。接着,它检查是否支持活动光源(active light)的能力。没有光源的屏幕看起来是平面的、是假的,因此一般至少需要一个光源。

还有一些代码在设备建立之前的确修改了该设备,你可能想知道这段代码的作用。能够执行处理过程的设备需要用多种方法来显示顶点,要么在硬件中计算或软件中计算,或者两者都使用。如果处理过程完全在硬件中进行,这就是另外一种模式,就叫做"纯硬件设备",它潜在地提供了更高的性能。这段代码检查你当前是否要建立一个硬件处理设备,如果你正准备这样做,并且该纯设备是可以使用的,那么它就切换到这种模式中。你不能建立纯设备(如果该设备是可用的)的唯一情形是你计划调用该设备上的某个get方法或属性。由于在这个例子中你不需要这样操作,所以你可以自由地使用能力更加强大的设备。

示例框架中有一些不安全(unsafe)的代码,因此你需要更新自己的项目并处理这些问题。见图2。

图2:允许不安全的代码

列举所有设备选项

现在你可以让框架组件开始列举系统中的设备了。首先,为游戏引擎类声明一个构造函数,并把main中建立的示例框架实例作为参数传递进去。如列表3所示。

列表3:添加构造函数

private Framework sampleFramework = null; // 示例的框架组件

/// 建立该类的一个新的实例

public GameEngine(Framework f)

{

// 存储框架组件

sampleFramework = f;

}

该构造函数除了存储示例框架实例之外没有做其它的任何操作,这是因为这个实例是游戏中其它的一切东西几乎都需要使用的。在你调用示例框架之后,它所做的第一件事情是试图列举系统中的所有设备。在你的项目文件中,你在Framework文件夹中可以看到dxmutenum.cs文件。这个文件包含了列举系统中所有设备所需要的全部代码。由于理解如何列举和为什么列举设备是非常重要的,所以请你打开这个文件。

你首先应该注意到Enumeration类自身是不能被创建的,并且每个可用的成员和方法都是用static(静态的)关键字声明的。由于在正常情况下(最少是现在)应用程序在运行的时候,你的图形硬件是不会改变的,因此这些列举代码只需要在应用程序开头运行一次。

总结

在本文中,你开始建立了第一个游戏项目,并且看到了示例框架的一些内容。你看到了大量的列举系统中可能支持的设备组合的代码。这个示例框架是你在未来编写游戏的一个重要的出发点。

相关文档
最新文档