捕鱼游戏开发及其若干优化技术的研究

2014-10-20 22:49:11高云鹏黄海明
电脑知识与技术 2014年25期
关键词:粒子系统游动资源量

高云鹏 黄海明

摘要:游戏开发过程中涉及很多关键技术,好的技术应用可以为复杂功能和卓越性能提供保障。该文以一款具体的捕鱼游戏设计为例,分析了游戏中的各种功能实现及优化技术,包括资源优化技术、压缩加密技术、碰撞检测技术、绘制优化策略、粒子系统、基于自由路径的鱼群算法、基于编辑器的路径生成技术等。通过运用这些技术,得到了较好的游戏结果。

关键词: 2D引擎; 资源优化; 路径编辑; 碰撞检测; 粒子系统

中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2014)25-5877-06

The Research on Fishing Game Development and Optimization Technology

GAO Yun-peng1,HUANG Hai-ming2,3

(1.School of Computer Science and Technology , University of Science and Technology of China (USTC), Hefei 230026, China; 2. Institute of Automation, Chinese Academy of Sciences, Beijing 100080,China;3. China Lottery Online Co., LTD., Beijing 100011, China)

Abstract: Game development involves lots of key technologies, appropriate use of technologies can support realization of complex functions and perfect performance. This paper takes the design of fishing game for instance, analyzes the methods for realizing functions and technology for optimization including resource optimization, compress and encryption, collision detect, render optimization, particle system, fish group algorithm based on free path, path generation based on editor etc. Through the use of the above technologies, the game result is good.

Key words:2D engine; resource optimization; path editor; collision detect; particle system

近几年,捕鱼达人游戏的面世,引发了全民捕鱼的狂潮。人们为其中新颖的玩法设计,丰富而流畅的界面表现,极强的趣味性而深深吸引。目前捕鱼类游戏已经从手机游戏扩展到了网页游戏,街机游戏甚至端游领域。该文将以街机版捕鱼游戏开发为例,围绕系统架构,软硬件及算法等各方面进行阐述。

1 游戏整体设计

在游戏系统设计中,首先要进行架构设计,以满足功能、保密性、高效性为目标,同时兼顾成本因数[1-3]。

在基础硬件上,考虑成本,选择了业内流行的微特迈工业主机。在这种主机上可以安装各种操作系统包括xp、winCE、Linux等等,所以不会对后续的技术选型造成太大的影响。

在游戏正式开发前,游戏引擎的选择至关重要[4]。由于这里要开发的是2D游戏,所以可以在如下这几种2D引擎中选择,例如HGE、SDL、COCOS2D等等。考虑到开发团队的知识结构,并考虑到在Windows下开发调试比较便利,且winxp精简版消耗的内存较小,也适合于在工业主机上安装运行,所以最终我们选择了适合于windows操作系统的HGE引擎。在VS2008 IDE中进行编程调试,最终在发布成xp版本。

由于要支持游戏专用键板输入,包括按键、摇杆、投币器等等,所以需要设计一块IO控制板,将所有的输入信号进行收集,最终形成约定格式的报文,通过串口上传给上位机。

由于要进行图片资源保护,本游戏系统还需要设计一块加密板,用来存放游戏用到的图片资源。加密板上的资源数据块可以通过特定的指令从加密板读出到主机内存中,并通过加解密,完成资源的应用。

最终,本游戏系统设计了高效的资源管理模块、灵活的鱼动画系统模块、高效简约的碰撞检测模块、特效模块并采取手段提升了游戏系统的可靠性。

2 功能设计与优化

2.1 图片资源设计与优化

在游戏中会用到很多资源图片,图片越多,加载越慢,且磁盘及内存占用的代价越高。合理的技术应用以及合理的资源划分可以在满足游戏逻辑需求的同时,大大降低图片资源量,从而达到节约磁盘及内存空间,并缩短加载时间的目的。

2.1.1 使用合理的游戏逻辑技巧减少资源量

气球鱼是游戏中的一个特殊鱼种,这种鱼在被炮弹击中一下就会膨胀一下,不断击中就会不断膨胀变大(直到达到膨胀上限)。这里有一种通用做法是,根据该鱼的不同大小由美术制作对应大小的图,全部放入游戏资源中,程序在不同的时候调用对应大小的图片来生成精灵对象并进行绘制。显然,这种方法可以生成很精美的气球鱼对象,但是资源量很大。为此本游戏采用了一种优化方法,就是对于气球鱼,美术只需要制作出一张图,由程序根据逻辑情况来决定要给这个对象缩放多少倍,这样就大大降低了资源量。但是其弊端在于由于要进行运行时缩放,需要额外的计算量,而且由于要进行缩放,会导致最终的游戏对象看起来不如通用做法那么精美。为此,本游戏系统根据大家的可接受情况,加入了一些中间级别大小的图片,在运行时根据需要缩放的倍率来选择与之最接近的那个大小级别的图片,并在此基础上进行缩放,从而提升了精度。最终这种方法在运行效率、显示精度和资源量之间做了较好的平衡。同样的策略还被应用于食人鱼等体积可变的对象上。

2.1.2 使用实时特效粒子系统降低资源量

海底气泡被大量应用于海底场景的不同位置。如果采用图片序列的方法来实现,则需要做很多套序列图(显然做一套是不合适的,因为这样会使得每个气泡点效果都雷同),会占用大量空间。因此,在实际对于海底气泡的实现中,我们采用了粒子系统。通过预先在粒子编辑器中编辑好对应的气泡粒子效果,保存成为粒子特效文件;然后在程序中利用粒子系统引擎API进行调用,在游戏初始化时载入这些特效文件,然后在游戏运行过程中在指定位置激发,就实现了海底冒气泡的效果。这种方法所形成的资源量极低,且每次播放的效果都不同,没有雷同感。同样,在很多其他的场合例如全屏炸弹爆炸等等,都采用这种粒子系统技术来实现,大大降低游戏资源量,同时也减小了因大图片而导致的渲染压力。

2.1.3 对游戏对象进行合理划分降低资源量

游戏中的鱼的姿态动作是通过制作序列帧图片来实现的。对于鱼A的普通游动,需要序列帧图1a;对于鱼B的普通游动,需要序列帧图1b。

圆盘鱼是那些带自旋转圆盘底座的鱼的总称,是游戏中的一种表现。圆盘鱼与普通鱼一样,也是通过制作其序列帧图片来满足游戏对象动画的需要。

圆盘鱼A、圆盘鱼B游动动画所需要的序列帧图片如图2:

因此如果有N种鱼及其对应的圆盘鱼,则需要2N套序列帧图片。显然鱼A与圆盘鱼A这两套游动序列帧图有很多相同之处,基于此,我们对圆盘鱼A进行了如下分解:鱼A游动+圆盘底座自转,分解示意图如图3。其中鱼A游动就用序列帧图1a,圆盘底座自转就只需要一张圆盘底座图,然后由程序来控制其自转。在游戏中通过数据结构将两者的位置绑定在一起,最终实现了圆盘鱼。最终的表现与原始方案一致,但是其资源量变成了N套序列帧图片+1张静态图片,内存占用小了很多。

2.2 鱼动画系统的设计与优化

游戏中需要各种各样的鱼在场景中游动,鱼动画系统分为鱼的自身姿态动作和鱼的运动路径控制两部分。

2.2.1 自身姿态动作

本游戏中鱼的姿态动画都是基于序列帧图来实现的,正如上一节图1a、1b所示。通过美术制作出游动、被击毙、击中反应等序列帧图来实现其游动动作、击毙动作和击中反应动作等,最终通过hge序列帧动画对象的更新来实现。

2.2.2 运动路径控制

鱼的运动路径控制所需的游动路径可以由程序实时生成。也就是说通过算法计算鱼在下一时刻的位置和朝向就可以使鱼一直游下去。但是显然这种方法无法生成比较漂亮的路径,且实时计算会消耗较多的CPU资源,并很难保证鱼的运动区域的均衡性。因此,本游戏系统采用了一种基于“路径编辑器+路径读取绑定”的鱼运动策略。首先人工编辑生成多条路径信息存放在文件中(简称路径文件),然后再将某一条路径绑定到鱼上,这样鱼就可以按照路径文件中的信息来进行位置更新达到运动目的。这种方法的好处在于可以由美术人员来进行路径设计,生成比较漂亮的路径,且可以使所有的路径在整个场景空间中分布比较均衡。其弊端在于需要生成路径文件,从而占用一定磁盘及内存空间。

路径文件是文本文件,其形式可以设计成很多种,最直接的方法是将各帧的路径点的位置和朝向都记录下来,保存在文件中,但是这样会导致路径文件过于庞大,空间消耗代价太大。为此,本游戏系统设计并实现了一种基于贝塞尔曲线(Bezier)的路径生成方法:通过预先设定Bezier曲线控制点,通过插值公式可以生成路径上的所有路径点的位置和朝向。从而使得在路径文件中,只需要记录各路径的曲线控制点,在加载时再插值生成其他的路径点,在实际运行时根据当前时刻取出对应的路径点位置和朝向。这样使得最终路径文件很小,只需要极低的磁盘内存空间。最终我们设计的路径文件如下(这是其中的一条路径的描述):

3 //鱼的种类:此路径适合于哪种鱼

31869 //此路径主要在那些炮位附近

552 //此路径总共更新多少帧才结束24 //每秒钟更新多少次

//控制点序列

//一个节点

-200 //基础路径点坐标

-174

-331 //与基础路径点对应的第一个控制点

-314

-66 //与基础路径点对应的第二个控制点

-35

803

604

408

335

1200

874

1791

1053

1562

741

2022

1365

1) 在预处理阶段,进行特效编辑,保存成特效文件;

2) 游戏初始化时载入特效文件生成特效对象;

3) 在游戏逻辑过程中需要的时候,在指定的地点激发特效对象。

2.5 其他优化技巧

在游戏绘制过程中,对那些真实屏幕之外的鱼的绘制毫无意义,而且会增加显卡负担,因此在遍历鱼队列进行绘制前,需要先判断鱼的状态,只有那些在屏幕内可见的鱼才真正调用绘制函数。这样提高了本游戏的渲染效率。

另外,游戏中采用了多线程来进行优化。例如在场景切换瞬间因为要加载大量图片数据而会导致CPU负载太大,出现1秒左右的卡顿,我们将待切换场景图片、海浪图片的加载提前到场景切换的时间点之前,并用专门的线程来完成,避免了卡顿现象。另外在多人同时发炮时,需要同时播放多个发炮音效,如果都放在主进程中,会导致主逻辑循环在发炮瞬间降到10fps以下。为此,最终游戏中是将声音的播放都放在一个播放线程中,解决了由于声音播放负荷过大而导致的游戏画面表现卡顿现象。

3 结束语

最终,我们按照上述开发方法和技巧完成了整个游戏系统的开发,并发布在工业主机上运行,如下是游戏截图(图8) 。在将屏幕上的空炮弹数限定在100发以内的情况下,当屏幕上鱼数达到80,且在屏幕上同时播放8个粒子特效的情况下,帧率也可以达到60fps以上,画面流畅,整体效果良好。

参考文献:

[1] 赵大伟,肖周芳,张艳.浅谈2D游戏的一些技术方法[J].科技信息,2008(30):81-82.

[2] 高凌琴,陈青华.俄罗斯方块游戏关键技术探讨[J].信息技术与信息化,2008(2):69-71.

[3] 郑勇,刘乃琦.BREW手机赛车游戏若干技术难点及实现[J].成都信息工程学院学报,2006(2).

[4] 黄蓝枭.游戏引擎中特效的实时渲染技术研究[D].成都:电子科技大学,2008.

[5] 李博.游戏人工智能关键技术的研究[D].上海:上海交通大学,2011.

[6] Van den Bergen G.Efficient collision detection of complex deformable models using AABB trees[J].Journal of Graphic Tools,1997,2(4):1-13.

[7] 王志强,洪嘉振,杨辉.碰撞检测问题研究综述[J].软件学报,1999,10(5):545-551.

[8] 张帆,潘瑞芳,叶福军,等.视频游戏中碰撞检测算法的选择[J].电脑知识与技术,2011,7(13):3136-3137.

[9] 陈学文,丑武胜,刘静华,等.基于包围盒的碰撞检测算法研究[J].计算机工程与应用,2005,41(5):46-50.

猜你喜欢
粒子系统游动资源量
永不停歇的鱼
江垭库区鱼类群落组成和资源量评估
当代水产(2022年8期)2022-09-20 06:47:12
球轴承用浪型保持架径向游动量的测量
哈尔滨轴承(2021年1期)2021-07-21 05:43:16
利用GPU加速的粒子系统全球流场可视化系统设计与实现
铀矿数字勘查资源量估算方法应用与验证
矿产勘查(2020年11期)2020-12-25 02:55:46
把手放进袋子里
小学科学(2020年11期)2020-03-04 11:39:00
塞拉利昂通戈金刚石矿资源量上升
UE 4粒子系统与外部数据通信研究
父亲
天津诗人(2014年4期)2014-11-14 19:05:52
我国页岩气可采资源量初步估计为31万亿m3