本系列文章由zhmxy555(毛星云)编写,转载请注明出处。
作者:毛星云 邮箱: [email protected] 期待着与志同道合的朋友们相互交流
本篇文章讲解游戏开发主题的相关内容,DirectX开发环境的配置以及依旧由《暗黑破坏神3》延展讲解一点游戏开发的知识。
事情繁多很多天之后,今天浅墨开始接着进行专栏的更新。
上篇文章一发出来,就有很多朋友在文章的评论中讲到了很多这个专栏系列的行文走向方方面面的问题,浅墨就在文章开头简要说明一下。
一,关于游戏开发的主题
既然大家都比较关注这个专栏系列的行文走向,就让我们先从单机游戏与网络游戏的联系与区别讲起吧。
我们都知道,游戏编程分为服务器端编程和客户端编程。传统的单机游戏一般都只会用到客户端编程,本系列专栏就注重这方面知识的讲解。
(若有必要,在介绍完游戏客户端编程的知识之后,浅墨也许会再开一个网络游戏开发的专栏,当然这还需要很久的时间,具体事宜到时候再与大家讨论商榷。)
客户端游戏编程需要掌握的主要是Win32编程, 计算机图形学,DirectX,算法与逻辑实现等方面的知识。
PC游戏界的后起之秀网络游戏显然包含了服务器端编程和客户端编程两部分。
服务器端编程需要掌握的主要是网络编程,数据库,多线程编程和Linux编程等知识。
(感谢yuan5531750提供给浅墨的多线程,网络编程等相关知识讲解的思路,但是浅墨觉得目前讲解这方面知识还不太妥当,若浅墨在结束这个专栏之后决定再写一个网络游戏开发的专栏,这方面知识将是重头戏。但多线程和网络编程在这个专栏里目前还不会涉及,浅墨得对yuan5531750暂时说声抱歉了,希望得到他的理解。)
好了,我们继续讲,近10年以来,随着互联网技术的迅猛发展,自从第一款轰动全球的网络游戏《传奇》横空出世以来,网络游戏逐渐代替了单机游戏曾经的霸主地位,成为了PC游戏的中流砥柱。从此之后,很多朋友开始乐此不疲地在魔兽世界,穿越火线,龙之谷,地下城与勇士等网游中消遣着业余的时光,丰富自己的生活。当然网络游戏的出现也催生了5173等网络游戏交易平台,游戏打金工作室,盗号工作室等网络游戏相关的第三方产业。
讲完这个知识点,我们来看下主线的任务,DirectX 11.
二、最简化的DirectX 11开发环境的配置
在编写基于DirectX 11的应用程序之前,我们当然需要在IDE中加入DirectX SDK函数库的支持,让编译器在编译我们的代码时候,认识我们在代码中调用的DirectXSDK中的函数。否则,编译器会报出undefined XXX等错误,因为如果我们不进行DirectXSDK的配置,编译器是不会聪明到认识这些函数的。
之前浅墨发表过一篇《DirectX开发环境快速配置》的文章,其实那篇文章中把DirectX SDK的配置说复杂了,由于目前是面向Visua Studio 2008以上的版本,配置过程将是非常的简单。
<第一步>下载和安装DirectX SDK
从微软官方网站上下载最新的DirectX SDK,我们选择目前最新的 DirectXSDK_June10 (截止2012年6月16日)。
下载地址是 http://www.microsoft.com/en-us/download/details.aspx?id=6812
下载完成后得到一个名为DXSDK_Jun10.exe的安装包,然后双击此文件进行安装。
安装目录浅墨设定的为 D:\Program Files\Microsoft DirectX SDK (June 2010) ,可以任意设定,但要记好目录,下一步会用到这个安装目录。
<第二步>进行相关的配置
打开Visual Studio(浅墨在这里示例的是Visual Studio 2010),依次点击【工具】(快捷键 Alt+T)->【选项】(快捷键O)->【项目和解决方案】->【VC++目录】
(英文版的为【tools】->【option】->【projects and solutions】->【VC++Directories】)
我们会得到如下窗口:
,需要的只是在【包含目录】和【库目录】中添加相关目录即可,浅墨在图中用方框标出了,添加的具体步骤如下:
<1> 在【包含目录】中加入安装的DirectX SDK目录下的include文件夹的路径,根据DirectX SDK的安装路径,即添加D:\ProgramFiles\Microsoft DirectX SDK (June 2010)\Include
这里如果是不同的安装路径需要部分进行修改,示意图如下:
<2> 在【库目录】中加入安装的DirectX SDK目录下的Lib文件夹的路径,根据DirectX SDK的安装路径,即添加 D:\Program Files\MicrosoftDirectX SDK (June 2010)\Lib\X86
这里如果是不同的安装路径依然需要部分进行修改,示意图如下:
添加完这两个目录,DirectX开发环境的配置就成功了,我们就可以在Visual Studio中运行基于DirectX的运用程序了.
PS: 如果在执行第二步的时候,也许会出现“VC++ 目录编辑功能已被否决”的情况。我们可以不采用上述的方案进入VC++Directories,转而采用如下方案:
执行菜单栏中的<视图>--<属性管理器>,在新出现的“属性管理器”工作区中,点击项目->Debug|Win32->Microsoft.Cpp.Win32.userDirectories即可打开vc++Directories
三、由《暗黑破坏神3》的衍生讲解
今天的讲解是基于浅墨在NGA上看过的一篇帖子,个人感觉写得很中肯,在这里感谢帖主精彩的行文,原文链接是:
http://bbs.ngacn.cc/read.php?tid=5264899&_fp=1
如下是精彩部分的摘要:
“每个程序都会有bug,哪怕它仅仅是个helloworld,如果程序没有bug,操作系统就会有bug,如果连操作系统都没有bug,世界就会毁灭。”
引用这句话是想告诉大家,游戏是个大型软件,是超越所有软件研发行业研发难度的系统工程,集“通信”“图形”“audio” “物理” “字符集”等难点于一身,这些东西光是分散开来形成一个单独学科都够任何一个人研究一辈子,而在游戏研发中,要把这些难点全部做到淋漓尽致,实在是对研发者的重大考验,更何况是暗黑3这样的大型项目,你们看看光是开发者列表有多少人,要协同这么多人一起工作更是一件非常具有难度的事情。而bug本身具有如下分类:
A类bug: 导致程序崩溃、死循环、系统当机、通讯断开、存储错误、流程无法继续等
B类bug: 主体逻辑正确,但分支逻辑不完善或缺失无法形成体系
C类bug: 设计不恰当、造成影响游戏体验
D类bug: UI排版、文字、图形的错误
F类bug: 术语及语言表达不当
目前看来,卡进度这个归结于B类bug,属于分支逻辑不完善,白话一些就是程序员没想完善所有可能的操作,而踢馆子这种事只能算做C类bug导致的游戏平衡性问题,说到这里,想起对不平衡的定义:让玩家产生单一或唯一选择就是不平衡。
怎么说呢?比如一个机枪兵造价50 攻击力10 一个坦克造价50 攻击力20 就让玩家产生了唯一选择 我想傻子才会去造机枪兵吧。踢馆子属于这类,在权衡了难度,成本,产量后,踢罐子成为大多数人的唯一选择,那么暴雪修掉这样的“bug”是非常正确的选择。
我们再来看看卡进度这个事情,很显然是因为负责这块逻辑的程序员没考虑到退出公共游戏后的进度保存问题,和之前的正常逻辑冲突了导致了所谓卡进度的“bug”。
接着我们来看看大家喷的最多的登录问题37,12,108,33,3007,3014等:
大家应该能看出这是我对一些数值的宏定义,那么为什么需要他们呢?
比如我在写代码,要创建一个1024×768的窗口,那么简单的填上1024×768就可以了吗?不,虽然可行,但不是最优的解决办法也不利于同事来读懂我的代码,如果我定义一个宽为1024 再定义一个高为768 那么我在代码中只需要写宽和高 而不用写具体的数值,这样一来,同事既可方便读懂,又可以非常快捷的修改这些参数,无论代码里引用了多少次我只需要在定义的地方修改数字就可以了,不是很方便么。同理37,12,108,33,3007,3014这些只是对状态的一种定义,比方说:
37:服务器满员
34200:维护中
315300:多国语言问题
以及等等。
以上就是本文的全部内容,谢谢欣赏。
另外,近期留过邮箱需要浅墨发送游戏开发入门到深入学习资料的数百位读者会在近三天内收到浅墨的邮件,前段时间由于事情繁多,没有及时发送,请见谅。
感谢一直支持【Visual C++】游戏开发笔记系列专栏的朋友们。
【Visual C++】游戏开发 系列文章才刚刚展开一点而已,因为游戏世界实在是太博大精深了~
但我们不能着急,得慢慢打好基础。做学问最忌好高骛远,不是吗?
浅墨希望看到大家的留言,希望与大家共同交流,希望得到睿智的评论(即使是批评)。
你们的支持是我写下去的动力~
精通游戏开发的路还很长很长,非常希望能和大家一起交流,共同学习,共同进步。
大家看过后觉得值得一看的话,可以顶一下这篇文章,你们的支持是我继续写下去的动力~
如果文章中有什么疏漏的地方,也请大家指正。也希望大家可以多留言来和我探讨相关的问题。
最后,谢谢你们一直的支持~~~
――――――――――浅墨于2012年6月17日