如何编写一个程序游戏 游戏开发的基本流程和技巧?

第一阶段 确定需求 在游戏开发之前,我们需要确定一下游戏开发的需求,什么叫确定需求?说白了就是我们要做什么样的游戏,可以通过GameJam来确定游戏开发的原型和核心功能这个阶段不会要求游戏的画面特别的精致,但要能体现玩法创意预研阶段 预研就是确定项目到底能不能做立项阶段 进行资金和人员储备第二阶段 底层库 在第二个阶段里,要先把游戏的底层库搭起来,比如游戏的网络通讯库、游戏的网络协议库,当然很多的网络通讯和网络协议的库都是已经提前做好的,你可以直接把它引进来,或者有十年或十年以上工作经验以后,有了自己的游戏框架,你就可以直接把你的框架带到新公司、新项目里去高层架构开发 底层库其实也包括了高层架构,比如开发游戏时肯定会用到MVC或者MVVM来做整体架构的解耦第三阶段 业务逻辑开发 在第三阶段里,我们会开发游戏的业务逻辑,这一阶段可以找一些工作经验没有那么多的新人,比如找一些新手同学来拼UI,来实现各种简单的业务逻辑很多新手在公司里被叫做UI仔,什么叫UI仔?就是专门负责拼UI、写UI的功能,并且是在主程已经开发好UI框架的情况下,他只是把一个又一个功能填进去,比如要响应什么消息,响应消息时应该展示什么画面,或者当我接收到用户的点击或者拖拽时,应该发出什么样的请求,就干这些事儿这是特别初级的程序员,稍微中级一点的程序员会开发相对复杂一点、核心一点,或者难一点的程序,比如开发游戏的战斗系统、做游戏的中台、或者做游戏的性能优化、做画面渲染的渲染管线定制,还包括SDK的接入、还有服务器的服务器逻辑,数据库缓存层的一些开发等等,基本上客户端的用人需求会比服务器要大一些第四阶段 测试 把游戏整体开发完以后就会进入到游戏的测试阶段,测试阶段有两种情况: 1,项目完全没有问题,那么你就会直接进入到第五个阶段,就是所谓的里程碑达成2,当你的项目出现问题时,就要回头进行架构或者是业务逻辑的调整,直到测试通过游戏的测试基本上是可以分成单元测试和联合的调试测试,单元测试又可以分成黑盒和白盒测试,并且也可以采用一些自动化的方法来进行测试在我们进入到压力测试的阶段时还会开发一些机器人来进行压力测试,比如在我们的《皇室战争》项目里就使用了机器人来对架构进行万人同服的压力测试,而且是单服万人同服,不是带有负载均衡的服务器,而是单个服务器能支持万人同时在线,并且我们的开房间也是做过相应的性能测试,能够承受商业项目的压力第五阶段 里程碑达成 里程碑达成以后,就会进入到下一轮迭代,在下一轮迭代里,我们会确定下一个需求,然后一步一步走下去有同学可能会说:“里程碑达成了,那么下一轮迭代时,我的底层库和高层架构还需要重新开发吗?还需要再去迭代吗?”答案是需要,可能有同学认为当开发完游戏的项目架构时,就没架构师,或者主程什么事儿了,但其实完全不是,因为架构也会经过一轮一轮的迭代,你的架构在性能、可扩展性、可维护性上是不是还有改进的空间,这是需要我们深思的一点就算你的架构在你认知的范围里,在架构师的认知的范围里已经足够的完美了,但你也不确定是不是会有新的需求出现,比如我们要开发一个国战,这对于服务器的性能要求就更高了,对于客户端中同屏处理的玩家或者是在跨地图时要做的处理也更多了这时的需求就发生了变化,架构师也需要重新调整程序架构,所以不是说咱们做完架构就什么事都没有了,当然你的业务逻辑也要继续开发,继续测试详细内容可以参考我们的《Unity全栈开发大师》公开课
关于游戏开发,需要对从一开始到最后开发一款游戏的一般过程有所了解。一般不是一个完整的,一步一步的指导完成的结果。你还需要自己找出相当多的东西才能有一个游戏。第一步:选择游戏库游戏库具有的功能:一种加载和呈现图像的方法一种加载和播放音频的方法基本图像处理(旋转等)原始绘图功能(圆、线、矩形、点等)渲染文本的能力跟踪时间和等待的能力创建和控制线程的能力(但不是必需的)第2步:定义概念——创意所有的游戏都从这里开始,只是一个人头脑中的想法。首先,想出一个游戏的主意。一旦你有一个简单的想法,扩展它。例如,如果它是一个棋盘游戏,目标是什么/你如何赢?规则会是什么样子?等等,如果你的游戏中会有人物或故事,那就创造他们吧。确保你有一个相当明确的概念,你的游戏将是什么,当它结束。游戏越复杂,你就越应该在一开始就计划好,这样你就不用在编码的时候担心游戏本身了。记住,你的游戏会随着你的创造而进化。第三步:规划你的引擎如果你正在制作一个棋盘游戏或者基本的街机游戏,你可以完全跳过这个游戏,只需对你的游戏进行编程。然而,对于更复杂的游戏,您可能需要考虑使用预先制作的引擎,或者编写自己的“引擎”。游戏引擎到底是什么?虽然它们在结构和整体功能上差异很大,是提供更高级别功能(如物理、资源处理和游戏实体管理)的超级功能库。选择使用存在引擎还是创建自己的引擎,这取决于您实际想要做多少编程。使用预先制作的引擎将简化您作为程序员的工作,编写游戏/事件脚本比其他任何事情都要简单。为什么我要说计划而不是选择?嗯,很有可能你不会做下一个老卷轴,并因此,可以创造你自己的“引擎”的种类。请记住,您将不会创建下一个“虚幻引擎”,您编写并打算重用的大部分代码(正如引擎的要点一样)最终将与您的游戏逻辑交织在一起,因此不可能很容易地重用。考虑到这一点,不要担心如果你的“引擎”部分依赖于游戏的特定代码,这就会发生。不要专注于构建一个完全可重用、超级健壮的框架,而是要确保代码具有可读性、组织性和功能性。首先专注于制作游戏,然后尝试创建可移植模块。如果您一定要编写有用的、可重用的东西,那么资源管理器和其他各种实用程序类就是很好的起点。步骤4:编写引擎(如果你是自己做的话)现在是开始编写引擎的时候了,前提是这是您选择的路线。这不一定意味着游戏本身,而是核心渲染、物理和文件处理;本质上是用来构建游戏的函数和类。简单的游戏并不需要太多的框架,只需直接使用游戏库编程即可。大型游戏中最重要、最被忽视的组件之一是资源管理器。资源管理器是一个类,它负责加载资源(考虑图形和声音),确保只加载一次资源,并在不再需要资源时卸载资源。引擎/框架的另一个重要方面是接口。当您编写游戏本身的逻辑时,编写主游戏循环不需要花4个小时,因为您搜索了数百个更新函数,试图找出您实际需要的函数。保持简洁。如果你能够用一个或两个函数调用来更新所有的游戏逻辑,然后再用一两个函数来渲染场景,那么你就在正确的轨道上了。利用面向对象的原则,例如继承和纯虚拟基类(想想接口)是创建具有良好结构的框架的好方法。步骤5:媒体(音频和图形)到现在为止,你至少已经考虑过你想让这个游戏看起来像什么样子,有了一套媒体可以使用。大量的免费图形和声音效果仅仅是谷歌搜索的地方。Audacity和GIMP是编辑您所获得或创建的任何内容的不可缺少的工具。第六步:写游戏一旦您选择了一个引擎或使用您自己的框架,您就可以实际编写游戏逻辑本身。理想情况下,在花费无数个小时之前,您至少已经完整地阅读了一篇文章,您将永远不会回到创建一个“引擎”的过程中,这个“引擎”超越了它的角色,几乎无法使用,但不足以独立运行。您的框架应该提供一个基础,用于构造对象交互(但不一定定义它),并处理所有渲染和其他低级细节,如物理。游戏逻辑本身将定义对象交互(例如,通过定义GameObject的子类)、游戏规则(例如什么构成输赢)、游戏的初始状态(首先加载哪个地图、您从哪个项目开始,等等),并包含主游戏回路。游戏的主回路到底是什么?简单地说:这是一个循环,主循环。想想看,在玩游戏的时候,什么东西会被不断重复,这些就是这个神秘的循环中包含的东西。例如,每次迭代游戏都应该更新所有的对象,然后将它们全部绘制到屏幕上。除了更新和绘图之外,主循环还可能负责计时。对用户来说,更新太多的游戏看起来非常快,而且很可能太难了。以光速思考乒乓球。理想情况下,这个循环将使用您先前创建的框架,并且非常简单。第七步:从里面取点东西创建一个独立于游戏逻辑的框架的主要原因是为了让您学会编写可重用的代码。初学者放弃项目的主要原因之一是他们花费了大量的时间和精力试图为他们的游戏“编写一个引擎”,但是他们还不知道一个好的引擎甚至包括了什么,或者一个结构/界面是否真的能工作。在浪费了所有的时间之后,他们没有什么可展示的,然后灰心丧气并因此退出。通过首先编写游戏,然后编写可重用的代码,理想情况下,您将得到一些您可以看到的东西。这是对你的努力的一个实实在在的奖励,也是一个继续努力工作的理由。在游戏中考虑加入这些:可以尝试用游戏代码制作可移植模块。编写了一个非常棒的资源管理器或出色的类来处理键盘输入,让它们完全可移植。步骤8:打包和分发将所有所需文件打包到一个压缩文件、压缩存档或可执行安装程序中,并发送给每个人!

我要回帖

更多关于 如何编写一个程序 的文章

 

随机推荐