第一关:具备踏上网络游戏开发征程的必备条件

喜欢游戏

对于自己非常喜欢的游戏类型,要非常投入地去玩其中的某款游戏,并且对一款网络游戏要有非常深入的了解。人的精力有限,不可能精通各种类型的游戏。但是有自己非常擅长的游戏类型或某款游戏并对其非常了解,这一点是非常重要的。

喜欢编程和实际工作

网络游戏的开发永远不会有终点。为了向用户提供持续服务,开发人员需要不断改进游戏,修复bug,修正各类问题。如果不能享受这一过程,那就很难在项目中体会到乐趣。也就是说要出于兴趣而开始从事游戏开发。

第二关:持续提升自身的技能

对开发团队来说,提升工程师的技能水平非常重要。网络游戏的开发周期一般在半年至1年左右,大型的C/S MMO游戏甚至会花费3年以上的时间。而且运营开始后,往往还需要3~5年的版本升级工作。在这个期间,如果更换对系统比较了解的工程师,会对游戏更新造成影响,所以从项目角度还是希望尽量由相同的工程师继续负责维护和升级工作。

现实中并没有万能的提升自身技能的做法,但这里为大家介绍其中一种很有效的,从武术的“守、破、离”中学习的提升技能的方法。

这里我们按照武术中常用的“守、破、离”将技能的提升划分为3个阶段:“守”是说初学者阶段,“破”是说在标准做法基础上进行改进,“离”是指自己进行创新。

“守”的阶段——从模仿开始

首先是“守”的阶段,初学者从模仿开始,先参考别人的游戏,这是最快的学习途径。

模仿现有的游戏,不过要注意两点:①要模仿经典作品而不是非主流的游戏;②要使用标准的、争议较少的程序库。因为如果使用最新的技术,就会同时学习很多东西,这会让学习的难度加大,影响效果。举个例子,如果直接用英语教材学习数学肯定会比先用母语教材然后再用英语教材学习的难度大。

初学者在模仿和学习的过程中,如果有可以随时请教的资深开发者的帮助,一般1~2个月就能入门。而且现在开发环境都很方便,大大缩短了学习周期。也有很多或开源或免费的资源,学习成本也不是很高。此外,在网络上关注那些资深开发者,就能够通过网络随时向他们提问,同时关注他们正在关注的知识和技术。有了这些,初学者就可以快速地学习相关技术。现在开发游戏时缺乏美术素材的问题也有办法可以解决了,在Google上搜索“nes sprite”可以找到很多可以使用的美术素材。

另外,开发者还可以利用社交网络的服务,收集玩家的反馈意见,甚至可以进行商业化尝试。这对开发者也是比较有利的一点。

“破”的阶段——研讨会、技术会议

初学者阶段结束后进入“破”的阶段,可以参加一些技术沙龙、会议,把听到的讲座转化为自己的理解。同时也是很好的机会,可以了解自己和业界的资深技术人员之间的技术差距。

不过,网络游戏的技术会议相对少一些,但最近以网页游戏为主的技术会议逐渐增多,大家可以在网络上搜索相关信息。

除了技术会议,在“破”的阶段,开发者可以多参与不同技术领域的游戏开发,参与到网络游戏和Web业界的开发中去,比如可以开发网页游戏、手机游戏,还可以参与教育游戏的项目、加入硬件开发团队、参与数据挖掘的项目、参与和游戏开发并不完全相关但是有关系(很可能会用到游戏开发中)的其他项目。

和游戏关系密切并且十分热门的相关技术有Web、WebGL、NoSQL、P2P、Android等。在网络中搜索并关注那些活跃的同行可以很快扩大自己的视野。然后可以在短时间内通过“模仿”的方式,快速尝试自己专业之外的技术。

在“破”的阶段提升技术,需要将一半的时间用在边缘领域,和之前没有共事过的人一起学习提高会取得更好的效果。

“离”的阶段——工程师的最高级阶段

进入到“离”的阶段的话……小编也不知道……(汗!)不过希望有更多的优秀网络游戏开发者能够早日进入这样的状态,和大家一起分享“离”阶段的宝贵经验。

第三关:突破网络游戏编程的技术难点

难点1:解决冗余和异步的问题

网络游戏的编程变得极为复杂?这是游戏处理的“冗余”和“异步”两个问题造成的。

游戏进行时的状态保存在某一侧(服务端或客户端)的计算机内存上,每当玩家做了某些操作,就会有一部分指定的数据被改变。网络游戏中,“某一侧的计算机”就是“实际在什么地方”的问题。这在SNS等Web服务中完全不是问题,但却是网络游戏开发中最大的问题。

  • 游戏处理的冗余化→解决主数据和副本数据之间的关系的问题
  • 游戏处理的异步化→解决在处理数据变化时同步和异步之间的关系的问题

难点2:主数据和副本数据——游戏处理、游戏的冗余化

数据是一种“被频繁使用”的东西。本来进行复制的目的就是将数据放置在离自己较近的地方来节约访问时间。比如,会议资料只有一份,在没有副本的情况下,参加会议的所有人员都不得不伸长脖子等着看那份资料,信息共享的速度非常慢。因此,“复制”的好处就是,主数据和副本数据的距离想多大就能多大。

主数据指的是原本的数据,副本数据是复制之后派生出来的数据。如果是数据库中的数据发生了改变,那么首先会对主数据执行修改,然后将主数据发送给副本。即使副本中的数据也发生了改变,但是之后发送过来的主数据会将这些改变覆盖掉,对副本所作的更改就会丢失。

难点3:高速缓存的问题

通过复制数据提高访问性能的典型例子就是“高速缓存”。存在于CPU和主存之间的SRAM(Static RAM)是一种比主存的速度更快的高速存储器,将主存中的数据复制到SRAM中可以提高处理性能。

在最初提出高速缓存时,最原始的方式就是只有在从内存中读取数据时才使用高速缓存,在写入数据时并不缓存,而是直接写入主存中。这种方式称为“直写”(Write through)。在这种情况下,向主存写入数据后,缓存中对应的内容就不是最 新的了,无法再使用。因为几乎所有的应用程序都会频繁进行读写操作,所以除了一些极为特殊的应用,这么做并没有带来显著的性能提升。

随后,一种称为“回写(Wtire back)”的缓存方式被提了出来,数据被高速写入缓存后,在具备了某些条件的阶段再将数据写入主存。在“具备某些条件的阶段”这一方面,各大芯片制造商实现了几十种不同的方法,比如“采用先进先出的算法写入”、“采用LFU算法(least frequently used,最不经常使用页置换算法)写入”、“随机写入”、“顺序写入”这种简单的方式,到使用更为复杂的算法、使用某些统计信息等,有各种各样的方式。

这里不对高速缓存系统进行详细讨论。根据主数据/副本数据的思想、应用程序的用途以及处理器、内存等物理组件的性能/性质,缓存系统的设计涉及很多方面,必须有各种技术上的解决方案。

网络游戏和高速缓存的比较参见表1,要求不同,网络游戏的系统设计变化很大。

表1 高速缓存和网络游戏

高速缓存 网络游戏
处理器用途 游戏内容
内存延迟和容量 数据包延迟和游戏的数据量
处理器数量 玩家数

难点4:异步方式、同步方式——游戏处理的异步化

比起高速缓存,网络游戏开发者应该对版本控制系统更有切身体会,每天都会用到。在这里,为了对其功能进行比较,我们以功能相对简单的2个产品为例进行说明,一个是开源的Subversion,另一个是微软在Team Foundation之前发售的Visual Source Safe。

表2中总结了以上两种源码控制工具与网络游戏的对比。

表2 Subversion、Visual Source Safe和网络游戏

项目 Subversion Visual Source Safe
用途 供分散的开发团队使用 供聚集在一间屋子里的小团队使用
避免覆盖和冲突的策略 复制+合并 文件加锁
在网络游戏中的对应说法 异步方式 同步方式

在判断网络游戏的架构时,必须决定“用哪里的CPU处理数据”。为此,必须对有关高速缓存的写入方式的策略、源代码控制工具的策略等关于“对于从主数据复制而来的副本数据,应如何处理对其进行的处理”有所了解。

第四关:把控网络游戏开发的成本

了解游戏开发的成本对于网络游戏程序员来说是一个进阶话题。开发项目有常识性的日程安排和成本,不过日程安排和成本是不能划等号的,当然,同时参与项目的人越多,即使工期时间短,成本也会非常高。

程序开发中增加人数并不会让工作效率呈线性增加,不过美术方面的工作可以通过增加人数来提高开发速度。因为美术工作可以按照“100个道具的图像”来量化规模,所以可以按照美工人数来分配。

开发成本和运营成本可以分别计算。在这里我们分别介绍项目中程序部分和美术部分的开发成本。根据游戏内容的不同,美术成本上下浮动很大,基本没有什么意义,这里只作为参考。调试的成本占总成本的1~2成,虽然在实际开发中也是不可忽略的部分,但限于篇幅在此不再介绍。下面介绍的成本可以作为一般性的指标,在具体开发中,根据项目的不同,可能会有很大不同,需多加注意。

根据游戏类型来划分,开发成本大致如下。

  • 程序的开发成本
  • C/S MMO
    • PC原生游戏:40~100人月
    • Flash:20~40人月
    • 手机游戏:20~40人月
  • P2P MO
    • PC原生游戏:15~50人月
    • Flash:3~30人月
    • 手机游戏:2~20人月
    • Web社交游戏:2~20人月
  • 美术成本
  • 大型MMORPG
    • 3D:20~400人月
    • 2D像素:30~300人月
  • 简单的MMOG
    • 3D:10~100人月
    • 2D像素:20~100人月
  • P2P MO
    • 3D:10~200人月
    • 2D像素:20~200人月
    • Web社交游戏:1~10人月
  • 运营成本
  • C/S MMO:每月成本为初期项目每月开发成本的50%~100%
  • P2P MO:每月成本为初期项目每月开发成本的5%~20%
  • Web社交游戏:每月成本为初期项目每月开发成本的100%~200%

如果是AAA游戏,大概需要在上述成本上再加一位数。比如跨平台游戏、在多个国家或者全球,同时发售多语言版本。这种情况可以使用Unreal Engine级别的昂贵的中间件,开发人数可能会超过100人。这类游戏的开发工期大致如下。

  • C/S MMO
    • PC原生游戏:1~3年
    • Flash:半年~1年
    • 手机游戏:3个月~1年
  • P2P MO
    • PC原生游戏:半年~1年
    • Flash:3个月~1年
    • 手机游戏:3个月~1年
    • Web社交游戏:2~6个月

上文列举了使用HTML技术的Web社交游戏的开发成本作为参考。相对于初期开发成本,社交游戏的运营成本一般会比较高。

如果开发团队给出的估算和上述数据有较大出入,则需要调查具体的原因。如果游戏中有“想要展现不同效果”的地方,可能也会得出应该积极投资的判断。


本文摘编自《网络游戏核心技术与实战》