游戏系统开发设计分享
我所搭建的总体架构非常简单就是
前端接入进程 +后端业务逻辑处理进程+数据库缓存进程+其他协作进程
一、组件基本介绍
1.通信组件 所有进程使用的是单线程,没有使用其他线程。进程间通信使用我们的一个自主开发的通信组件。
2.数据协议组件 我们也是自主开发的一个以xml表现形式,通过工具生成.h头文件,二进制bin文件。数据加载文件等。也可以和数据库进行交互的数据文件,也可以进行网络传输等,功能十分强大。
游戏的基本组件详细实现就不介绍了,本文主要介绍如何通过这些很好的组件来搭建可用性,稳定性,可扩展性的一个游戏项目
二、框架
单独进程的游戏,内部函数运行状态有多种,比如收到某个信号。等下面主要介绍一下几个回调函数
1.进程初始化函数,也就是该函数在程序启动的时候,对配置文件和一些组件等初始化。
2.时间驱动函数,该函数会每秒钟运行一次。
3.消息处理函数,实质是一个死循环,不停的的接收其他模块或者网络过来的消息,进行处理
4.重载函数。当该进程,有一些配置等需要热更新的东西,可以直接调用该函数进行重载
5.进程退出函数。当收到某个信号后,进程需要安全退出的
。。。。
ok,当我们把这几种模块回调函数定义好,框架基本就可以起来了。然后通过初始化一些组件信息,用来进行进程间通信,数据描述等进行了启动进程
目前已经有了具体的前端接入的进程,通过组件的共享内存方式发送到后端业务进程。
三、游戏的基本元素
1.地图
对于我们的mmorpg游戏来说,地图是最基础的东西了。当玩家进入游戏,首先进入的是一个世界的概念,就是在一张张地图上来跑动,和其他玩家进行互动。
来模拟真实的生活环境。
那么我们的地图是如和实现呢。
首先要知道地图是以像素为单位,在一个二维的平面地图上。每个像素点都是有坐标的,但是每张地图非常巨大,不可能把每个坐标点记录下来。因此我们程序就要对一些点的集合进行处理。
既要游戏的体验感好,又要程序处理速度快。就要选择合理的小格子。就我经历过的项目而言,有菱形的,有正方形的,有矩形的等等,根据需求进行处理。我们的是矩形,边长为30*50像素的矩形
而这个矩形,就代表了很多信息,我们通过用一个字节来表达这个格子的信息,比如第一位是阻挡信息,第二位是技能层等等,有八位供选择。前后端要约定好
然后,当美术给我们了一张地图,我们会开发一个地图编辑器工具,将地图按照规定的小格子,和前后端约定好的数据信息,生成一个地图mask文件。提供给后端使用。
ok,一些基本的数据信息我们已经得到了,我们就需要提供一些具体的函数了,通过给我们的mask文件,进行一些必要校验,比如,我们在地图行走,下一点是否是阻碍点。
当我们释放某些技能,是否能通过。是否到达了地图的边界,扇形攻击的角度,范围等等函数,这里是需要一些数学的基础知识等。
为了达到我们游戏的一个体验感比较真实的效果和计算机速度等因素,我们对地图有进行了一个更大区域的划分。叫动态区域。每个动态区域都有固定的大小。这是根据我们游戏屏幕进行划分的。将屏幕划分为九个区域,每个区域主要是包含了一些实体的内存实例id,比如当玩家进入这个区域我们会将该玩家的内存id加入该区域呢,离开就删除。这是个动态的过程。
每张地图都是有一个tick,也就是上文我们提到的tick。
也就是我们保证,当玩家看到你了,一定是我也能看到对方。这个时候,我们就通过这写来调用数据包发送协议,将自己的数据发送到对方。
因为有个tick,因此,在内存中的玩家,每秒钟都会进行tick,每秒钟都会进行对玩家的所在地图,进行动态区域的更新。
同样,怪物也是同样的道理,我们通过tick,对地图上的怪物进行处理,如果怪物死亡,就将其id删除,更新视野。然后根据具体业务具体处理了
2.人,怪,物表现
如何通过计算机,然后表现在地图上呢。
首先我们知道,我们所有的实体在计算机里,其实都是一段内存表现,通过这段内存,记录了我们所有的需要记录的数据。比如账号名,在线信息等等。
那么,我们首先预分配好一个巨大的内存池。当有个新的账号登陆的时候,我们就在内存池里取一段内存。此时我们已经记录到了数据库了。
同样,我们也分配了怪物的内存,等等。
3.技能系统。
技能系统算是所有系统里最复杂的东西了。设计的东西非常多。比如当玩家打出去一个技能,伤害,mp,状态等等等等,都会对伤害进行修正,打出去有什么效果。
在地图上怎么表现,能否穿过障碍等等。
4.任务系统
任务系统主要是有接受,完成,奖励的等,整体来说不是困难。
5.背包,
也是最复杂的一个,主要是背包的一些操作吧。整理,堆叠移动等等,设计大量的算法等。
还有很多系统,目前所有的系统我都设计开发,目前主要是致力于防刷,性能提升,bug漏洞修复等等。
下篇文章可能主要介绍网络接入这块,还有具体的登陆这块
开发游戏还是蛮有乐趣的,以后有心得继续给大家分享。
补充:移动开发 , 其他 ,