游戏编程入门(1):游戏专业概论

版权声明:本文为Jurbo原创文章,转载请加上链接和作者名,标明出处。 https://blog.csdn.net/Jurbo/article/details/73301842

《游戏专业概论》 陈洪,任科,李华杰编著 清华大学出版社


游戏的类型-按内容架构分类

角色扮演类游戏RPG

角色扮演类游戏(RPG,Role Playing Game)又可以分为以下几种。

ARPG(Act Role Playing Game):动作型角色扮演游戏
SRPG(Strategty Role Playing Game):战略型角色扮演游戏
MMORPG(Massively Multiplayer Online Role Playing Games):大型多人在线角色扮演游戏

角色扮演类游戏提供给玩家一个游戏中形成的世界,这个神奇的世界中包含了各种各样的人物、房屋、物品、地图和迷宫。玩家所扮演的游戏人物需要在这个世界中通过到处旅游,跟其他的人物聊天,购买自己需要的东西,探险以及解谜来揭示一系列故事的起因和经过,最终形成一个完整的故事。

RPG游戏中比较有代表性的是《魔法门》和《最终幻想》系列,而国内经典RPG游戏的代表就是《仙剑奇侠传》了,其后也出现了《金庸群侠传》、《轩辕剑》系列等游戏。

《暗黑破坏神》是一款非常经典的动作型角色扮演游戏,《火焰纹章》系列是最成功的战略型角色扮演游戏,而《传奇》则是大型多人在线角色扮演游戏的代表。

即时战略类游戏RTS

RTS(Realtime Strategy Game):即时战略类游戏。

即时战略类游戏,就是玩家需要和计算机对手同时开始游戏,利用相对平等的资源,通过控制自己的单位或部队,运用巧妙的战术组合来进行对抗,以达到击败对手的目的。即时战略类游戏要求玩家具备的是快速的反应能力和熟练的控制能力。

即时战略类游戏代表作品:《星际争霸》系列,《魔兽争霸》系列,《帝国时代》,《红色警戒》系列。

动作类游戏ACT

动作类游戏(Action Game,ACT)是由玩家所控制的人物根据周围环境的变化,利用键盘或者手柄,鼠标的按键做出一定的动作,如移动,跳跃,攻击,躲避,防守等,来达到游戏要求的相应目标。

动作类游戏是最传统的游戏类型之一,动作类游戏的代表作品:《波斯王子》,《古墓丽影》。

格斗类游戏(FTG)

格斗类游戏(Fighting Game,FTG)是从动作类游戏中脱胎分化出来的特殊类别,就是指两个角色一对一决斗的游戏形式。

格斗类游戏的代表作品有:《街头霸王》,《拳皇》,《三国志武将争霸2》。

第一人称视角射击游戏(FPS)

第一人称视角射击游戏是动作类游戏的特殊形式,顾名思义就是以玩家的主观视角来进行的射击游戏。玩家不再像别的游戏一样操纵屏幕中的虚拟人物来进行游戏,而是身临其境地体验游戏带来的视觉冲击,这就大大增强了游戏的主动性和真实感。

第一人称视角射击游戏的代表作品:《反恐精英》,《荣誉勋章》

冒险类游戏(AVG)

冒险类游戏(Adventure Game,AVG)一般会提供一个固定情节或故事背景下的场景给玩家。同时要求玩家必须随着故事的发展安排进行解谜,再利用解谜和冒险来进行后续的游戏,最终完成游戏设计的任务和目的。

冒险类游戏的代表作品:《真三国无双》,《鬼屋魔影》

模拟类游戏(SLG)

模拟类游戏(Simulation Game,SLG)提供给玩家几乎真实的处理较复杂事情的环境,允许玩家自由控制,管理和使用游戏中的人或事物,通过这种自由的手段以及玩家们开动脑筋想出办法来达到游戏所要求的目标。

模拟类游戏又分为两类,一类游戏主要是通过模拟我们生活的世界,让玩家在虚拟的环境里经营或建立一些像医院、商店类的场景。玩家要充分利用自己的智慧去努力实现游戏中建设和经营这些场景的要求。

这类游戏的主要作品有《主题医院》,《模拟城市》等。另一类主要是模拟一些现实世界的装备,让玩家操纵这些复杂的装备,以真实性取胜,追求身临其境的感受,如《傲气雄鹰》系列,《微软模拟飞行》,《钢铁雄师》等。

运动类游戏(SPG)

运动类游戏(Sport Game,SPG)就是通过控制或管理游戏中的运动员或队伍进行模拟现实的体育比赛,我们大家所熟悉的大众运动项目几乎都可以再游戏中找得到。

运动类游戏的代表作品:FIFA系列,NBA系列,《实况足球》,《极品飞车》系列。

休闲类游戏

代表作品:《大富翁》,《蜘蛛纸牌》等

游戏开发人员需求及过程

游戏开发的人员需求

游戏开发涉及的人才种类很多,综合起来需要七大类:游戏项目管理类,游戏策划类,游戏软件开发类,游戏美术类,游戏音频类,游戏质保类,游戏运营类。

游戏项目管理类

游戏项目的管理是项目开发最重要的组成部分。很多开发团队的能力受到局限,并不是因为缺少程序员或美术设计师,而是缺少项目经理等管理人才。

游戏项目的管理可以分为很多不同的部分,由不同的人来负责不同范围或层次的管理,例如制作人、开发经理、项目经理等。

游戏策划类

游戏的内涵全部都出自于策划的思考,策划师的工作成功就是游戏的灵魂。

策划工作所涉及的岗位也很多,其中包括负责游戏总体控制的主策划师,负责关卡和任务涉及的关卡设计师,负责文案写作的剧情文本设计师,负责游戏规则设定的规则设计师,负责平衡性调整的数值平衡师等。

游戏软件开发类

策划人员制作了游戏的蓝图,但是如果软件编程人员不具体实施,就不会产生任何游戏。软件编程人员的作用显然就是编写代码,比如3D引擎,网络库等。游戏软件一般都很庞大,代码量多在数十万行以上,将编程工作做适当分工是非常必要的。

一般来说游戏软件编程人员涉及的岗位有引擎开发工程师,工具开发工程师,客户端/服务器开发工程师等。如果在大的开发企业可能会进一步按专业分工细化为图形开发工程师,人工智能开发工程师,物理系统开发工程师,音频开发工程师等。

游戏美术类

游戏中的美术涉及很宽广的领域,游戏中可见的界面,人物,动物,植物,武器,特效等全都是美术工作的成果。

游戏中的美术创作还包括二维图像,三维模型,动画,素描等各种类型,需要认真组织团队才能提高制作效率,减少巨大工作量带来的障碍。

一般来说游戏开发团队中美术设计师分为原画师,2D设计师,3D模型师,3D动作/动画设计师等。

游戏音频类

游戏中的音频包括背景音乐,音效,对白配音等。相对应的岗位是作曲、音效设计师、录音/播音员。

值得注意的是,处于成本方面的考虑,大部分中小型公司会将音频制作工作外包给专业的第三方团队,而不再公司内保留该类型人才的编制。

游戏质保类

质量保证(QA)是游戏开发中非常重要的组成部分。如果只是在游戏开发完成之后进行测试,不断地玩游戏,直到游戏完全没有问题,那样效率会很低。正确的做法是安排专门的测试人员在游戏开发的中期就直接介入。

游戏测试人员大致分为两种,一种是软件测试人员,他们更偏向技术,主要职责是通过技术手段发现程序本身的Bug并提交,很多公司直接将他们归入软件开发类人才甚至直接由编程人员完成测试工作。

另一种是游戏逻辑测试人员,他们更多采用“玩”游戏的做法去测试游戏的可玩性、难度、平衡性等。

游戏运营类

游戏运营给人的感觉是与开发关系不大,这是很多人容易犯的错误。如果脱离运营人员的各种调研工作,开发出来的产品很可能不符合市场需求。

游戏运营类人才包括市场推广人员、渠道专员、客户服务工程师、GM等。

游戏开发过程

游戏软件由于其复杂性,开发周期往往长达数年。在这数年中,一般需要经过提案立项,设计,实现,测试及评审,发布这几个阶段。(测试及评审后会再次实现,测试评审)

第一阶段-提案立项

提案立项阶段要做的主要工作是明确要做什么样的游戏,游戏的名称是什么,采用何种表现形式(2D,2.5D,3D等),游戏的特色何在,实现在什么样的平台上,人员如何搭配等问题。

任何公司开发游戏的最终目的都是为了盈利,因此作为游戏开发者就应该针对市场来设计游戏,而不能仅针对个人的喜好来设计游戏。能被大多数人接受的游戏才是一款好游戏,才能更好的盈利。

在决定做什么游戏之前,要先确定主要针对什么样的玩家来做游戏,是男孩还是女孩,是老少皆宜还是20岁左右的年轻人,只有这个目标确立了之后才能更好的挖掘这类玩家的心理,使游戏的涉及更充分的满足这类玩家心理和精神上的需求,这样,游戏才能被更多的玩家接受,团队才能更好的盈利。

根据已确定的玩家群体,就该选择适合这个玩家群体的游戏题材,一个游戏题材的选取也非常重要,好的题材有助于设计者表现游戏的特色,使玩家很快的了解游戏背景,游戏能够容易上手,更好的被玩家接受,例如网易退出的《梦幻西游》,其取材自中国古典故事《西游记》。

目前,主要有以下三大类游戏题材比较容易被玩家接受。

  1. 发布地区人人皆知的历史或宗教
  2. 与常识有关的
  3. 与某有名的故事或电影相关的

总之,在所选玩家群体中大部分玩家都熟悉的题材上做游戏会更容易被玩家接受。

接下来就要进行游戏概念的涉及,需要确定的是游戏的类型(例如RPG,RTS,格斗等)、游戏的表现方式(例如2D、2.5D或3D),在什么平台上实现以及游戏的特色。这些问题都要根据团队的技术实力,市场需求的紧迫程度,开发成本等各方面因素来决定。

在确定了游戏的类型,表现方式和实现平台之后,就要在这三个条件的限制下尽可能的发挥策划的创造力,在游戏特色上尽可能的下功夫,并写出两份文档:一份“创意文档”和一份“立项建议书”。

创意文档必须要让公司其他人员能够明白游戏的总体轮廓。在立项建议书中要写清游戏针对的人群,游戏类型,游戏表现形式,游戏实现平台,游戏特色,实现所需的大致时间以及人员安排等。

最后,召集市场,技术,美工等人员进行集体评审,根据这份立项建议书,客观评价技术实力,开发周期,市场效应等问题,最终决定是否需要正式立项。

第二阶段-设计

设计阶段需要策划,程序,美工,市场共同协作完成,一个游戏品质的好坏,这个阶段起到了决定性作用,下面将对这四中职责的工作内容分别进行阐述。

策划:根据创意文档进行游戏的详细设计。例如有什么样的道具,各种物品,角色的设定,人物的各种行为,属性,地图或者场景的设计等。本阶段可以不同具体的游戏用途,用一些简单的图形表示即可。策划应该先不考虑平台的限制,尽可能的发挥创造力去设计游戏,当游戏设计完之后再根据平台的限制对游戏策划进行修改以达到具有可行性的最终策划案。

程序:根据创意文档开始引擎的设计,针对游戏类型和游戏表现方式设计或修改游戏引擎和游戏开发需要的工具,例如脚本编辑器的设计,地图编辑器的设计等。并完成编码通过测试,使程序没有灾难性的Bug。

美工:美术人员需要经常与策划进行沟通,根据策划的描述开始设计游戏中的各种角色,物品,场景的原型并做出原画设计。美术人员应该对游戏中美术部分的设计起主导作用,而不仅仅是像工人那样百分之百遵从于策划。

市场:市场人员需要经常与外界沟通,保持敏感性。他们必须完成以下两件事。

  1. 经常与策划沟通,搜集与项目开发有关的资源
  2. 关注类似游戏的市场效应

第三阶段-实现

实现阶段的任务主要就是根据策划案来实现游戏,这个阶段的工作量是整个开发周期中最长而时间上又最不好控制的。

在游戏开发过程中各岗位之间存在着很强的依赖性,工作的时序性很强,如果没有做好开发计划,团队中会经常出现等工的现象,浪费时间。所以,在开始本阶段工作之前,应以天为单位做出详细的开发计划,在开发计划中要量化工作内容,工作的时序要安排得当,尽量避免出现等工现象。

策划:在这个阶段策划最主要的工作包括如下几点。

  1. 经常与各部分人员沟通,协调好每个人每天的工作,控制好开发进度
  2. 与美术人员协同工作,保证模型及图片达到游戏要求的品质
  3. 与程序人员协同工作,保证软件功能达到策划案要求
  4. 用地图编辑器设计游戏场景
  5. 根据剧情编写游戏脚本及对白等
  6. 编写数值设定方案并在游戏中实施此方案

程序:根据策划案,设计游戏逻辑程序(如AI、碰撞、交易系统等),做好游戏的版本控制。在本阶段初期可能美工的作品还没有做好,但程序员可以先用一些类似的图形代替,等美工做出成品后再替换进去。在整个开发过程中程序员应当在技术上起主导作用,除了写好程序外还应当指导美工按照程序的要求作图及模型,指导策划及其他人员使用游戏开发工具。

美工:根据策划案的美术需求列表制作图片和动画,根据市场人员的要求设计海报和其他宣传品。为了提高游戏品质和开发效率,可以把游戏过场动画交给专业外包小组来做,由美工和策划人员验收,这一点要根据团队的技术实力和经济实力来决定。

市场:制定市场宣传策划,提出需要设计制作的宣传品列表,交给美工设计。经常与策划沟通,多了解游戏内容和游戏的开发进展,以便于决定什么时候开始做宣传,投入多大的宣传力度。

在这一阶段的工作中,团队需要至少每周开一次例会,各部分人员在会上总结上一周的工作,并根据实际情况调整工作计划,制定下一周的工作任务。在工作中遇到的问题可以在会上提出来,讨论解决。

第四阶段-测试及评审

测试的内容包括游戏的平衡性,数值设定是否合理,游戏用途及模型是否需要修改,有无程序错误等。测试可以采用先内部测试再公开测试的顺序进行,公开测试可以得到大量反馈。

评审工作实在测试的基础上,审核游戏的品质,决定是否需要做大的修改。如果离最初设想的差距太大,就需要调整游戏发布计划。但需要注意的是:要考虑清楚进行再次开发所需要的开发周期,资金及人员搭配等。

第五阶段-发布

进行最终的数值调整,每次调整后都需要进行测试,力争达到消除所有Bug,同时制作产品说明书及相关文档。根据市场需求,制作足够数量的宣传用品,并进行市场宣传。

以上就是一般团队进行游戏开发的5个阶段。当然这里只是一个框架,并不是每一个项目都要完全按照这些内容去做,每一个项目都要根据情况来灵活的确定各个阶段具体的工作内容。

游戏工程师及其工作

什么是游戏软件工程师

游戏软件工程师专注与游戏软件的编程工作。能够使用编程语言编写代码,实现软件功能是作为一名软件开发人员的基本要求。但是由于游戏类软件开发的特殊要求,也使游戏软件工程师有如下一些不同之处。

  1. 为了在游戏中模拟真实的物理世界,程序开发通常涉及大量的数学,物理计算工作,因此往往要求开发人员熟练掌握相关数理知识。
  2. 与很多实用性软件不同,除了易用性,稳定性,功能性之外,游戏软件对运行效率要求甚高,这往往要求游戏软件程序人员对软件体系的底层有相当的认识。深刻理解计算机体系结构,操作系统,显卡/声卡驱动等相关内容,是实现一款高效的游戏软件的重要保证。

为了完成一个游戏,游戏软件工程师需要完成以下工作。

  1. 游戏引擎的开发与维护
  2. 游戏编辑工具开发与维护
  3. 游戏逻辑的实现
  4. 其他的需要软件工程师来实现的内容

以游戏软件开发作为职业,需要接触到广泛的技术方向,例如图形渲染,音效处理,工具开发,压缩算法,路径寻找,人工智能甚至软件开发管理等。

游戏软件工程师的分工

在非常繁重的代码编写工作情况下,分工也就自然产生了。作为游戏核心技术的引擎代码编写需要专门的引擎开发工程师,作为引擎一部分的游戏工具也需要专门的人员负责。

使用引擎构建网络游戏的时候需要专人进行客户端和服务器程序的开发等。游戏软件中的不同模块往往需要不同的技能要求。

例如,服务器端编程往往对计算机硬件,操作系统的了解有很高的要求,而客户端编程人员必须熟悉显卡编程方法、各种图形函数库等。

下面将一一列举游戏软件工程师相关的工作岗位和技能要求。

技术总监

作为最高层的技术负责人,技术总监往往有开发经验丰富的人担任,他们不仅要有对成熟技术的把握能力,还必须在新技术上保持足够的敏感度,能够发现新技术并将其整合到公司技术体系中。

首席程序设计师

在一个没有管理者的开发团队中,普遍自信的程序设计人员会很容易迷失自己。因此,在游戏开发团队中必须有一个可以领导这些程序员的领袖,这就是“首席程序设计师”,在公司中一般简称为“主程”。

从技术层面上看,首席程序设计师是对游戏引擎及游戏程序架构最为了解的人,是程序开发团队中最富有技术能力的人。他们还必须要有将程序全面整合的能力,还必须担负起程序小组的管理职能。

游戏引擎开发工程师

引起开发工程师负责对公司所使用的引擎进行开发及维护。具体来说,就是按照引擎设计开发实现自有游戏引擎,或者采用新的手段不断对现有引擎加以改进,始终保持引擎的技术先进性。

同时引擎开发工程师要与具体负责游戏开发的工程师紧密配合,保证在游戏开发过程中引擎的使用。此外,他们还要负责维护相当的引擎开发技术文档和用户接口文档等一系列文档,保证公司的技术积累。

以下是某公司对游戏引擎开发工程师的招聘要求,具有参考意义。

岗位:
游戏引擎开发工程师

岗位职责:
游戏引擎的设计开发与维护。同时维护系统架构文档,开发技术文档,用户接口文档,编写工具使用说明书等

任职要求:
精通C/C++、有良好的面向对象分析能力,设计能力,规范的编程风格,熟悉系统级编程,熟悉三维图形原理和算法,精通OpenGL或DirectX,精通编译原理,精通系统优化,精通可扩展系统的结构设计和精通设计模式。

游戏客户端开发工程师

在网络游戏开发中,一般会在引擎基础上构建客户端应用程序,完成该工作的人员就是客户端开发工程师。他们的主要任务是使用引擎提供的支持开发游戏的图形客户端,因此要求他们相当熟悉引擎本身,熟悉游戏将来运行的目标平台。

以下是某公司对游戏引擎开发工程师的招聘要求,具有参考意义。

岗位:
游戏客户端开发工程师

岗位职责:
使用引擎完成游戏图形客户端开发。

任职要求:
具有较强的图形图像程序设计能力和逻辑分析能力。精通C/C++、面向对象的设计,熟悉Win32/VC++开发平台和常用API,熟悉三维图形原理和算法,精通OpenGL或Direct3D。

因为游戏客户端的开发工作包括游戏的3D图形开发和游戏程序的界面开发两部分,因此有的公司也会分别设置3D图形工程师和游戏客户端界面工程师两个职位,分别专注于使用OpenGL或Direct3D的图形开发和使用Win32 API的应用程序开发两个方向。

游戏服务器端开发工程师

在网络游戏开发中,服务器端的开发是必不可少的,完成该项工作的人员就是服务器端开发工程师。

他们的主要工作就是使游戏响应速度更快,系统更稳定,同时可以承载耕读偶的用户且有更高的安全性。

对服务器端开发工程师来说,要求他们熟悉网络通信原理,精通Socket网络编程以及Windows多线程技术,以达到上述的要求。

以下是某公司对游戏服务器端开发工程师的招聘要求,具有参考意义。

岗位:
游戏网络开发工程师/游戏服务器端开发工程师

岗位职责:
负责大型网络游戏网络端的程序设计与开发

任职要求:
要求熟悉C++;精通TCP/UDP协议;有丰富的大规模C/S模型的网络应用设计和开发经验;精通Socket编程,对于完成端口模型及线程池模型有一定的开发经验;精通数据库接口设计。

游戏工具开发工程师

各种游戏编辑工具是游戏设计师们在开发过程中所必须使用的,也是游戏引擎的重要组成部分。

游戏编辑工具包括地图编辑器,角色编辑器,特效编辑器,声音合成编辑器等。他们将用于产生地图,关卡,人物等。

游戏工具开发工程师应该对Windows下的应用程序开发(主要是指MFC或.NET)较为熟悉。同时需要熟悉引擎及其数据模型,因此需要将数据与工具相结合以进行编辑。

以下是某公司对游戏工具开发工程师的招聘要求,具有参考意义。

岗位:
游戏工具开发工程师

岗位职责:
开发一系列游戏开发工具,如地图、场景编辑器,模型,动画转换插件/工具等

任职要求:
精通C/C++、面向对象的设计,熟悉Win32/VC++开发平台和常用API,精通MFC或.NET应用程序开发,有复杂界面Windows应用开发经验者优先。

其他工程师

由于引擎本身很复杂,在某些企业会进一步将引擎开发工程师细分为引擎图形开发工程师,人工智能开发工程师,物理系统开发工程师,音频系统开发工程师等。这些职位的工作面相对比较窄,但对深度要求并不低。

游戏软件技术结构

游戏数学基础

一般人所熟知的数学大致可分为高等数学,线性代数与几何学,概率论,离散数学等几个方面。
对于三维游戏开发来说,贯穿始终的是线性代数与几何学的知识,因为他们是计算机图形绘制的基础。

在游戏开发中,我们所考虑的是如何使用计算机语言来描述,构建一个模拟的游戏世界。因此,就需要用数学语言来定量的描述几何空间,这正是线性代数与游戏的结合点。

三维游戏使用线性代数的研究对象:向量、矩阵来描述空间的方向、位置、角度,通过向量,矩阵间的运算实现游戏空间中人物,物体的移动,旋转等。

因此程序员在游戏开发中需要的数学知识,除去计算机学科必需的数学知识外,还需要侧重于线性代数与几何学。

左手坐标系和右手坐标系

3D空间中的每个物体都有前后,左右,高低这三个轴向上的位置属性,于是可以用三条相互垂直的坐标轴组成的标准笛卡尔坐标系来确定物体的空间位置。

在笛卡尔3D坐标系中,又分为左手坐标系和右手坐标系。左手和右手坐标系的区别是坐标系统中Z轴的指向。

坐标系确定了技术人员描述游戏世界的基础,进行游戏开发时首先要了解所使用的图形标准和系统是什么坐标系。例如,Direct3D采用的是左手坐标系,OpenGL却使用的是右手坐标系。

向量在游戏中的运用

向量本身拥有长度和方向,所以向量在描述几何空间中具有很大的作用。例如,在游戏中光线的照射方向,多边形的朝向,摄像机观察三维空间的方向甚至枪械设计的方向都可以用向量来表达。

矩阵变换在游戏中的运用

在线性代数中,矩阵就是以行和列形式组织的矩形数字块。书写时用方括号将数字块括起来,矩阵的维度被定义为它包含了多少行和列。

行数和列数相同的矩阵称为方阵。一般来说方阵能描述任意线性变换,这里的变换包括旋转、缩放,投影、镜像等。游戏中的大量图形变换都是通过矩阵计算完成的。

游戏物理基础

在题材上,许多游戏描述的都是虚无缥缈的世界。但是,再玄幻的游戏内容在细节上也要符合人的习惯性思维,物理学规律就是其中最典型的情况。

例如,在弹球游戏中用到的碰撞,它就要遵守动量守恒和弹性形变等规律。在赛车游戏中速度、加速度、摩擦力之间的关系也是通过一系列的物理原理来换算的。

飞驰电掣-速度与加速度

物理原理在游戏中的应用首先是游戏中的运动,任何运动的物体都有一定的速度和加速度。只有游戏中的元素表现出确定的速度和加速度,在一定程度上符合我们日常经验的运动状态,玩家才能够正常做出诸如:判断敌人手榴弹的轨迹,计算提前量开枪,控制玩家角色运动等基本的操作。

雷霆万钧-重力与动量

在电子游戏的虚拟世界中,为了呈现物理运动的真实感,仅仅了解和模拟物体的速度属性是不够的。因为要使玩家感受到真实的物体,飞驰的汽车,横飞的弹片或其他现实生活中的物体必须是有质量感的。而在游戏中模拟物体的质感,主要是通过重力和动量的原理来实现的。

了解物理动量守恒的原则之后,我们就可以根据碰撞物体各自的重量,碰撞前速度,方向计算碰撞后的速度,方向,以模拟真实的碰撞。

爆炸效果

各种爆炸是在游戏中经常出现的物理现象。我们可能感觉爆炸会产生无数的碎片,需要考虑无数的物体运动,其实,爆炸的物理现象是很容易做到的,只要仔细将爆炸的物理现象加以抽象分析,就能够做出同现实生活中的爆炸一样的效果了。

爆炸的过程大概可以分为两个阶段,一个阶段是爆炸的瞬间,在这个瞬间,物体碎裂,每个碎裂块都受到爆炸源的巨大冲击力,这个力是巨大的,根据动量定理mv=ft,物体的速度将在瞬间增加到很大。并且重力和这个力相比可以忽略不计。第二个阶段就是这个作用力消失后,物体已经获得了巨大的速度,而且还受到重力的作用,这个阶段物体做一个自由落体运动。

数据结构基础

线性结构-队列和栈

队列是一种先进先出的线性表,它只允许在表的一端进行结点插入,而在另一端删除结点,允许插入的一端叫做队尾,允许删除的一端称为队头。像日常生活中的排队,最早入队的最早离开,就是先进先出。

队列在游戏中的应用:

有过《反恐精英》游戏经验的人都知道,游戏中的枪械朝墙或地上设计的时候会留下弹孔,这种效果增强了游戏的真实度。但任何效果的实现都是需要消耗内存的,因为要完成弹孔的显示就需要存储全部弹孔的位置信息,如果枪林弹雨中每颗子弹留下的弹孔都会被显示出来,那将消耗大量内存空间,这将对任何游戏硬件平台都是个压力。细心的玩家会发现,《反恐精英》中的弹孔数量实际上是有限的,当达到一定程度后,最先留下的弹孔将会消失,这就是典型的“先进先出”,也是队列在游戏中使用最典型的实例。

栈是仅允许在表的一端进行插入和删除的线性表。栈的表尾成为栈底,表头成为栈顶,可以把栈看成一个只有一端开口的容器,取出元素的口和放进元素的口是同一个口。这样先放进去的元素只能比后放进去的元素后取出,这是栈的特性-先进后出。

栈的应用:

很多软件都提供了UNDO(撤销)功能,即用户可以按顺序撤销自己曾经进行的操作,当然撤销的顺序是最近做的操作先撤销,这就是典型的先进后出,是栈的应用实例。

非线性结构-树与二叉树

树是一种应用十分广泛的非线性结构。在游戏中的许多技术都要使用到树,例如,对弈游戏,人工智能中的A*算法等都需要由树来实现。

二叉树常常应用于查找、压缩等算法。在3D图形算法中,最普遍的应用就是空间分割上的二叉树和八叉树分割算法。

数据的物理存储结构

数据结构按物理存储结构的不同分为顺序存储结构(顺序表)和链式存储结构(链表)。顺序存储结构把逻辑上相邻的结点数据存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。

顺序存储结构的特点是:逻辑上相邻的数据元素存储在物理上相邻的存储位置,数据元素在顺序表中的存储位置取决于该数据元素在线性表中的顺序号。对于这种存储方式,可以直接计算出某个元素的存储地址,因而能随机存取表中任一数据元素。

游戏中常利用顺序表的优点做查表运算,例如,游戏中常用到三角函数计算,而该计算是非常消耗CPU时间的,所以常会将一定精度的三角函数提前计算出来,存放在顺序表里,需要用时只需要根据角度值查询就可以了,这可以提高百倍效率。当然这种方法只适合于低精度计算,因为高精度的三角函数表将会占用大量内存空间。

链式存储结构不要求逻辑上相邻的结点在内存物理位置上亦相邻,结点间的逻辑关系由附加的“指针”等手段表示。

在链式存储结构中插入一个结点或删除一个结点时只需要修改少量的指针,并不需要移动大量的数据元素,而且链表可以动态的改变长度,不需要限制结点的数量,所以链表比较适合应用在经常要进行删除或插入的场合和不能预测线性表长度的场合。多人联网游戏中,玩家列表的存储就适合用链表来存储,因为玩家随时可能加入或退出。

3D API

基本上每种3D显示卡的3D渲染实现方式都有所差别,然而,3D API将他们全部都呈现为统一的编程接口给程序员,所以一次编写的代码可以在不同3D显示卡上都有基本相同的输出结果。

OpenGL

OpenGL是开放图形库的缩写,是一套三维图形处理库,提供真正的设备无关性,可适用于各种平台,它能在网络环境下以客户机/服务器模式工作,充分发挥集群运算的为例,是专业图形处理、科学计算等高端应用领域的标准图形库。

DirectX SDK

DirectX是Microsoft开发的基于Windows平台的一组API,它是为高速的实时动画渲染,交互式音乐和环境音效等高要求应用开发服务的。

Socket 网络编程

网络游戏不仅仅需要硬件,客户端软件本身需要互相传递类似移动,攻击,退出等信息。完成这些功能的开发需要网络编程。游戏网络编程一般通过Socket实现。

当两个计算机程序想要通信时,他们也创建Socket与另一个连接,以构成数据传输通道。具体做法是一台计算机建立监听Socket,随时等待其他计算机的连接请求,已经建立监听Socket的程序被成为服务器。希望连接服务器的程序被称为客户。一旦服务器接受客户的连接请求,双方就可以传递数据了。这种客户机与服务器之间的通信的模式也被成为C/S模式。

服务器与客户机的Socket之间传输的数据是可以被拦截的,游戏外挂就是利用了这一漏洞修改被拦截的数据包,从而欺骗服务器上的逻辑判断程序。


国内著名的游戏开发社区https://gameres.com/,初学者可以在上面结识很多的前辈

没有更多推荐了,返回首页