客户端设计(1)
发表于2015-07-29
关于一般的游戏模式设计(客户端)
因为现在市场上的大部分游戏可能都是用引擎做成的 所以我们在这里讨论的游戏的设计模式目前是
不包括游戏底层硬件的东西 当然shader和渲染的部分我们目前在这里也不做讨论
今天我想和各位分享和讨论的就是一个网游类型游戏的轻型化客户端设计
笔者工作的时间不算长 所以文章中有错误的地方还请各位多多包涵
因为目前大多数的游戏客户端是不含AI逻辑 伤害计算之类的东西 所以我们在此讨论的客户端会主要
专注于界面系统的设计和与服务器的交互逻辑
关于界面系统的设计我们就拿一个例子来说明吧
(-)技能界面的设计
界面的客户端逻辑我们基本采用这样的设计模式
一个界面对应一个类
类与类的交互我们用消息的模式(会有专门的消息路由类 存放着界面类的引用或者单例)
界面操作的逻辑写在界面对应的类里面
而界面操作后需要改变的数据我们专门写在一个数据类里面
也就是说我们写一个系统 首先确定一个系统有多少个界面 然后确定这个系统所需要的数据 最后确
定这个系统所需要和服务器交互的协议
当我们确定这些东西后把一个一个界面提取出来 写成一个一个的界面类 把数据提取出来 写成一个
专门的数据类 最后把所需要的与服务器的协议提取出来 专门写成一个服务器类负责与服务器的交互
上面是我们一个系统设计的大体思路
下面我们写具体的代码设计
我用C++的语言来大体的实现一个模拟的界面让大家来具体的看看代码是怎么设计的
因为是模拟实现 所以我们找一个简单的界面来实现 (当然能实现一个界面也就能实现其它的实现)
我们假设有一个闯关过后的结算界面 而且这个界面只有一个按钮
class UI
{
//创建界面
void CreateUI()
{
//这里绑定界面按钮资源 绑定按钮响应函数
}
//进入界面
void EnterUI()
{
}
//退出界面
void ExitUI()
{
}
//按钮点击响应
void Buttnoxss()
{
}
}
//网络服务类
class Net
{
//向服务器发送请求
//增加金钱
void RequestAddMoney(int money)
{}
//增加装备
void RequestAddEquipment(Equipment* equipment)
{}
.......
//接受服务器的数据
//接受加钱加装备的操作是否成功
void AcceptNetMsg()
{}
....
}
//这个数据类只是做数据的缓存 数据的修改只能以服务器类传过来的数据为准 这样可以防止玩家作
弊
class Data
{
//人物的数据
int level;
Equipment* equipment;
......
}
这上面三个类大概就描述了一个界面的开发流程 当然这只是最简单的模拟 而且上面的类结构其实还
差一些辅助性的东西 比如消息路由 比如网络类 又比如内存管理类 或者枚举信息类
不过在实际的公司的开发中大概的流程就是笔者上面写的这样
下次笔者再来完善这个客户端类结构设计