当前位置:文档之家› C编写3D游戏框架示例

C编写3D游戏框架示例

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(静态的)关键字声明的。

由于在正常情况下(最少是现在)应用程序在运行的时候,你的图形硬件是不会改变的,因此这些列举代码只需要在应用程序开头运行一次。

总结
在本文中,你开始建立了第一个游戏项目,并且看到了示例框架的一些内容。

你看到了大量的列举系统中可能支持的设备组合的代码。

这个示例框架是你在未来编写游戏的一个重要的出发点。

相关主题