得了重要的金钱或道具而导致丢失的情况。刀剑采取的方法是在申请用户关键数据对象的
时候通过包装的函数从共享内存中申请,这样即便 ZS 非法操作了,共享内存并不会消失,
在重新启动的时候就可以从共享内存中恢复出程序非法时的用户数据。当然恢复的时候也
需要对用户数据进行一些校验,以免把已经被破坏的数据存入数据库。[1]
2.3 设计思想分析
游戏逻辑服务器主要负责汇总所有在线的 client 发来的各种操作、状态等数据包,经过
一系列的处理后有选择的广播给需要的 client,从而给所有在线的玩家呈现一个“统一”的
世界。
优秀的逻辑服务器架构需要优秀的设计思想,而优秀的设计思想又源于对游戏虚拟世界
的适度抽象。抽象可以看作一个工程问题,同时也可以看作一个哲学问题,这正是游戏开
发的魅力所在。本系列 blog 将围绕这种抽象一步步展开,结合不同的项目来诠释网络游
戏服务器端的设计思想(希望能做到....)。
站在服务器端的角度对游戏虚拟世界进行抽象,首先要弄清楚构造虚拟世界需要些什么?
让我们来想象一下吧(以下内容参照了《盗梦空间》-“Inception”),先来看一段视频:
Inception 是我非常喜欢的影片,第一次看到这一段的时候,就感觉非常像游戏设计。
今天能把它写下来也算没浪费几十块的电影票钱。
影片中饰演 the architect(造梦师)的艾伦·佩姬(女),正在接受莱昂纳多(饰演 the
extractor-盗梦者)的训练。莱昂纳多说道:“Remember you are the dreamer you
built this world。”,“I'm the subject my mind populates it”。值得关注的两个名词:
world,subject。这就是我们要讨论的主题。那么构造网络游戏的虚拟世界需要些什么呢?
其实莱昂纳多已经替我回答了这个问题:“We create and perceive out world
simultaneously. You create the world of the dream, We bring the subject into
that dream, and they 7ll it with their subconscious.”。world 就相当于游戏里的场
景,而 subject 就是一个个在线的玩家(player)。
游戏世界(world,这里的 world 泛指游戏世界及地图,见 2.3.2)及游戏对象
(object,包括 player)是构造网络游戏服务器端时,需要关注的两个重点。如何处理好
world 和 object 的关系和地位直接影响到服务器端的构架。
2.3.1 游戏对象(object)
先来看游戏里一般会有那些 object,以 Mangos 为例: