提示:
本书设定在Visual Studio .NET IDE中编写代码。这不是使用.NET编写游戏的需求,也不是使用.NET本身的需求,它是本书所选择的IDE。图1-2显示了Visual Studio .NET 2003 IDE。
该IDE提供了编写.NET应用程序所需要的所有工具。它不仅包括编写代码所需要的编辑器,而且还有其他大量功能,使得.NET应用程序的开发变得容易。它的设计使得您能够方便地创建丰富的内容,如Windows应用程序。它也具有一个内置的编译器和调试器,并且无缝集成了所有功能。本书设定使用这种IDE进行开发。
图1-2 Visual Studio .NET IDE
熟悉这种IDE的最好方式是使用它编写一个简单应用程序。典型的计算机
编程是编写一个简单的Hello World应用程序,该应用程序只是在屏幕上输出Hello Word文本。老实说,这非常令人厌烦,因此您应当尝试编写更复杂的程序。但也不需要奇特的程序,因为这只是对IDE的一个介绍,当然在程序中包括一些用户特**互将更好。在这里将编写一个应用程序,询问用户的姓名和出生年份,然后输出用户的当前年龄。
1.3.1 C#代码
现在启动Visual Studio .NET 2003 IDE。首次启动时,应当看到图1-2所示的默认启动页面。单击该页中的New Project按钮,启动一个新的项目。如果没有显示这个页面,也可以单击File | New Project菜单项,或者按下Ctrl+Shift+N快捷键。这将产生一个New Project对话框,如图1-3所示。
应当首先尝试C#代码,因此在New Project对话框中,从左边的列表框中选择Visual C# Projects项,从右边的列表框中选择Console Application项。为项目命名,然后单击OK按钮创建该项目。这将创建一个新的控制台应用程序,当前它什么都不执行。使用程序清单1.1中的代码替换自动生成的代码。
图1-3 New Project对话框
程序清单1.1 简单的C#控制台应用程序
using System;
class ConsoleApp
{
static void Main()
{
Console.Write("Hello World C#!\r\nPlease enter your name:");
string name = Console.ReadLine();
Console.Write("Hello {0}, please enter the year you were born:", name);
int year = int.MaxValue;
while(year == int.MaxValue)
{
try
{
year = int.Parse(Console.ReadLine());
}
catch (FormatException)
{
Console.Write("You did not enter a valid number. ");
Console.WriteLine("Please enter an integer, such as 1975. ");
}
}
Console.WriteLine("You must be approximately {0} years old! ",
DateTime.Now.Year-year);
Console.WriteLine("Press the key to exit the application");
Console.Read();
}
}
如果您已经熟悉了C、C++或者Java,则C#语言的语法与这些语言非常相似。尽管C#的底层运行库仍然是CLR,但是它的语法源于这些语言,熟悉它们的开发人员很容易进行移植。该代码根本不复杂,它在询问用户的姓名和出生年份之前,首先使用Console类输出一个简单的消息(该消息包含Hello World)。注意,该应用程序接着询问出生的年份,直到用户输入一个有效的数值。它最后利用一个简单的公式输出用户的当前年龄。图1-4显示了该应用程序的运行过程。
图1-4 第一个应用程序
1.3.2 VB .NET代码
如果读者更熟悉Visual Basic语法,很可能能够理解前文中的大多数代码。这两种语言的语法差别不是很大,但还是应当尝试编写一个Visual Basic .NET版本的应用程序。再次启动一个新的项目,并采用在C#代码中所使用的相同指令,其中不同之处是项目的类型。应当选择Visual Basic Projects项目,创建该项目后,使用程序清单1.2中的代码替换自动生成的代码。
程序清单1.2 简单的VB .NET控制台应用程序
Module Module1
Sub Main()
Console.Write("Hello World C#!" + vbCr + vbLf + "Please enter your
name:")
Dim name As String = Console.ReadLine()
Console.Write("Hello {0}, please enter the year you were born:", name)
Dim year As Integer = Integer.MaxValue
While year = Integer.MaxValue
Try
year = Integer.Parse(Console.ReadLine())
Catch fe As FormatException
Console.Write("You did not enter a valid number. ")
Console.WriteLine("Please enter an integer, such as 1975. ")
End Try
End While
Console.WriteLine("You must be approximately {0} years old! ",
DateTime.Now.Year - year)
Console.WriteLine("Press the key to exit the application")
Console.Read()
End Sub ‘Main
End Module ‘ Module1
如您所见,从C#到VB .NET的代码移植并不复杂。因为这两种语言运行于相同的运行库之上,所以这两段代码仅存在微小的语法差别。也应当注意到,这两段代码产生了相同的结果。这是.NET的一种强大功能,它允许开发人员使用他最熟悉的语言编写代码。如果使用了
编程语言X,您不必担心不能利用
编程语言Z中的功能Y。因为每一种托管语言使用了相同的底层运行库,它们都具有相似的功能集。
1.4 在命令行中编译.NET代码
| 到目前为止,使用Visual Studio .NET IDE是开发.NET应用程序最容易的方法,但它并不是仅有的方法。.NET运行库将C#、VB .NET和VJ#的编译器随其运行库一起发布,因此只要有一个文本编译器和.NET运行库,就能够创建任何.NET应用程序。 提示: 为了实际开发并使用.NET应用程序,需要.NET运行库。如果没有安装,您可以从Microsoft的网站http://www.microsoft.com/net处下载。 打开一个文本编辑器(例如Notepad),输入前面某一个程序清单中的代码。保存该代码,并打开一个命令提示符。在使用.NET运行库中的编译器之前,需要设置路径,将其指向底层.NET Framework的位置。在命令窗口中,输入下面的命令更新路径: set path=%path%;C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322 警告: 如果Windows文件夹不是在C:\ windows处,当更新路径变量时,确保输入了正确的Windows文件夹位置。 命令行编译器位于上文所列出的文件夹中,与一些组成.NET运行库本身的程序集相同。C#的编译器是csc.exe,VB .NET的编译器是vbc.exe。这些可执行文件具有相似的命令行参数集,可以使用单个参数/?来显示这些编译器的所有参数。 假设使用了该代码的C#版本,并将文件保存为class1.cs,可以利用如下命令将应用程序编译为名为app.exe的可执行程序。首先定位到代码文件所在的文件夹,然后运行下面的命令: csc /out:app.exe /target:exe Class1.cs 输出应当类似于下面的内容: Microsoft (R) Visual C# .NET Compiler version 7.10.3052.4 for Microsoft (R) .NET Framework version 1.1.4322 Copyright (C) Microsoft Corporation 2001-2002. All rights reserved. 现在运行该应用程序,它将产生与使用IDE作为开发环境时相同的结果。 1.5 游戏开发简述 | 在2001年,视频游戏的收入首次超过了电影工业的票房收入。该产业欣欣向荣,并需大量优秀的开发人员。如果一个公司能够在某个顶级游戏中花费上百万美元,那他们很自然地会对游戏开发团队非常挑剔。本章将讨论游戏开发的过程和制作这些伟大游戏的团队。
1.6 开发人员 | 在最近几年中,作为DirectX组的一员,我非常高兴能够与大量的游戏开发人员一起讨论问题。尽管每一个开发人员都是独特的,但是他们具有相似的特征。其中最显然的特征之一是他们都绝对喜爱游戏。当然,这是可以预料的。游戏开发是一项艰苦的工作,它时间长、任务紧,压力大。那些不具有献身游戏精神的人应当去编写没有这些压力的软件。 尽管目前对于一个游戏工作室来说,宣布在开发游戏中的花费是不常见的,但是许多游戏在开发期间花费了上百万美元,这是公司发行游戏的真实投资。许多游戏需要多年的开发,这需要对游戏本身和开发人员、艺术家、设计人员以及任何参与制作的人员具有绝对的信心。很多时候,发行商屈服于压力,并在游戏准备好之前就发行。另外一种情形就像Duke Nukem Forever(3D Realms所发行的一款游戏)该游戏的开发时间超过了5年,发行商直到它最终完成才发行。 回到视频游戏开发的早期(古老的拱廊和Atari家庭系统),游戏通常由一个或两个人编写,编写时间是几周而不是几年。由此可以看到当今的视频游戏世界的巨大进步。回到那时您可以制作一个非常简单的游戏,例如Galaga,它只有一个级别,玩家只能反复地在该级别中进行游戏。它的图形简单,但非常有趣并且令人着迷。它的编写困难吗?任何曾经看到该游戏的开发人员应当认识到它非常容易编写。 相反,当今的游戏功能非常巨大,必须设计、开发庞大的世界,并且创建一些艺术资产。大多数游戏包含多个级别和非常复杂的玩法,而不是早期游戏中所看到的向前向后移动并开火。所有这些先进的特性需要越来越多的开发时间,并且由于当今游戏玩家期望这些先进的特征,所以任何大预算的项目似乎都不可能在短短的几周内完成。 当今的大游戏也对游戏开发人员的繁荣添加了一层复杂性,因为捕获大众注意的游戏不再可能由个人完成。实际上个人(甚至是一个小组)也不可能将所编写的游戏放到货架上出售,因为计算机软件商店销售游戏的开销是非常高的。 大多数游戏开发初学者将他们编写的游戏作为共享软件发行,甚至是免费软件。有大量的网站为共享游戏开发作贡献,该团体由其他许多游戏开发人员组成,他们提供有价值的反馈、测试和论坛,在论坛中可以展示新思想以及炫耀您的最新创作。初学的游戏开发人员不可能通过创建这些小的共享游戏变得富有,但却使得他们能够开发重要的“样片(demo reel)”,在大预算项目中申请一个游戏开发位置时,可以使用这些样片。 正如引言中提到的一样,本书将引导您学习开发一个高性能、完全3D的游戏所需要的技能,使得您在某一天能够开发自己的样片。在这之前,您需要询问自己:准备好成为一个游戏开发人员了吗?并询问自己以下几个问题: ● 您喜欢玩视频游戏吗? ● 您是否曾经沉迷于游戏而忘记了时间? ● 您常常在思考这些世界是如何创建的吗? ● 您是否相信自己具有能够转换为下一个伟大视频游戏的构想? ● 您对当今存在的所有相同的老游戏感到厌烦了吗?您有关于重新定义流行视频游戏的构想吗? ● 您希望我闭嘴,并马上告诉您如何编写自己的视频游戏吗? 如果您对这些问题中的一个或多个回答了“是”,则表示您非常渴望成为一名游戏开发人员。或许您已经具有某些构想,但不具备将头脑中的构想通过代码转化为实际游戏能力。本书将通过实际的游戏 编程快速教会您这些技能。 1.7 游戏开发过程 | 所有的游戏开始时都只是一个构想。如果没有构想,能编写什么呢?如果只是随机的编码,能够希望它在未来成为一个伟大的作品吗?尽管这对抽象画家的工作可能有效,但软件开发人员不能在没有计划的情况下做任何事情。但是,只有构想,并不意味着可以开始编写代码。 我曾经看到(并且将不断看到)的最大的错误是,开发人员提前进行代码的编写。除非代码非常简单,不用动任何脑筋,那么您可以立即开始编写代码,否则在只有一个构想的情况下就开始编写代码,决不是好的做法。在没有计划的情况下开始编写代码,所带来的只是更大的工作量、更多的反复编码以及更长的开发时间。 在编写代码之前,应当开发一个设计规范。该文档应当包含关于如何设计代码、对象如何交互和对象可能具有的各种属性的特定信息。如果没有这一步就直接编码,在大多数情况下将导致解决错误的问题。即使您能够快速的解决这些问题,但是如果没有解决正确的问题,工作就是毫无意义的。结果将会花费更多的时间为真正的问题寻找解决方案。 您也应当花一些时间将构想记录到纸上(或者计算机文件中)。如果不想让您关于下一个伟大的计算机游戏的构想非常含糊,以至于设计规范无法描述需要求解哪些问题,那么您最好确保您的构想是生动的。将构想展示给朋友,让他们提问题,并确保这些问题能够在您的文档中得到回答。如果您的构想类似于“编写一个令人恐怖的第一人射手游戏”,那么说明您还没有很好地思考您的构想。玩家具有什么类型的武器?可以获得什么类型的游戏模式?支持多人游戏吗?在采取进一步的行动之前,您需要很好地思考您的构想。 如果您正在尝试为发行商开发游戏,那么也需要开发一个游戏建议。尽管将这一建议写入文档是非常重要的,但在大多数情形下,更需要一个足够好的演示片段。如果只是基于一个构想,发行商通常不会将项目交给您(除非您在游戏开发方面已经具有很大名气,如果是这样,您将不需要学习本书)。 1.8 工具 | 编写伟大的游戏并不只是编写好的代码。当然这并不表示代码的编写不重要,在创建这些游戏时,还需要考虑其他大量因素。所有游戏开发都需要一个好的工具集。 当今的大多数游戏(即使是严格的2D游戏)都有大量的艺术成份,这些艺术成份是采用3D模型软件包开发的。这些工具对于参与游戏开发的艺术家来说是无价的,它们使得浮现在脑海里的构想成为现实。尽管在本书中并不讨论如何创建所需要的艺术,但会提到使用的工具。当今所使用的两种非常流行的数字内容生成工具是Maya和3D Studio MAX,分别如图1-5和图1-6所示。 但是,创建艺术并不只是3D建模。即使一个模型由上百万个多边形组成,如果没有纹理的话,看上去也是很乏味的。很多工具可以用于创建纹理,例如Photoshop(如图1-7所示)和Paint(在安装Windows时附带安装了Paint,如图1-8所示)。 图1-5 使用Maya建模一个宇宙飞船 图1-6 使用3D Studio MAX建模一个妖怪 图1-7 使用Photoshop创建纹理 图1-8 使用Paint创建纹理 开发和艺术加工工具都是非常好的工具,您将在游戏开发中使用到它们。还有一些其他类型的工具也非常重要,但很多人甚至没有考虑到它们,例如一个优秀的源码控制管理工具。 假设您的游戏具有声音,那么您很可能需要用于处理声音文件的工具。可以使用Windows附带的Sound Recorder(如图1-9所示),也可以使用比较复杂的WaveStudio,它是Creative Lab的音频软件的一部分(如图1-10所示)。 图1-9 使用Sound Recorder 图1-10 使用Creative Lab的WaveStudio 利用所有这些工具为游戏创建内容,您可能需要一个能够为整个团队存储内容的工具。很可能有大量的信息需要存储,以及定期备份。最好是只备份新更改和添加的记录。大多数源码控制管理工具至少提供其中某个功能。Visual Studio 中的Visual Source Safe是一个简单的源码控制管理工具,它适用于小的团队。该工具不包含大型团队所需要的许多强大功能,例如允许多人操作一个文件和自动合并相互冲突的改变等功能,但是对于一个小团队中的小项目来说,它通常能够满足需要。还有大量其他的源码控制工具(例如Perforce),因此您需要做一个小的调查,找出哪种工具适合您和您的小组。当然,使用任何一种工具都比没有工具强。 1.9 小结 | 本章主要介绍了.NET的基础知识。相信您已经对.NET和托管代码有大致的了解,并且采用两种语言编写了一个简单的应用程序。您也学习了如何在集成开发环境之外编译这些应用程序。至此,已经介绍了如何开始进行游戏开发的相关基础,并且介绍了游戏的开发人员、开发过程以及游戏开发所需要的某些商业工具。 第2章中将介绍游戏开发相关的内容。 | | | | | |