游戏编程
文章平均质量分 68
风云来
这个作者很懒,什么都没留下…
展开
-
游戏客户端之cocostudio的动画库
设计上:(1)添加骨骼动画会把贴图(TestBone0.png)添加到纹理缓存,把plist资源(TestBone0.plist)添加到精灵帧缓存。把骨骼配置文件数据(TestBone.json)读取到骨骼数据管理器。骨骼配置文件数据包括骨骼数据(到骨骼数据容器)、动画数据(到动画数据容器)、纹理数据("texture_data")到纹理数据容器。原创 2014-04-13 15:41:48 · 1876 阅读 · 0 评论 -
游戏服务器之线程池调度策略
T *getOne(){struct GetBest:public callback{T *_t;GetBest():_t(NULL){}bool invoke(T *t){if(!t->isAlive()){if(!t->start()){return false;}}if(t->taskSize() maxTaskSize()){原创 2014-06-30 02:47:10 · 1749 阅读 · 0 评论 -
游戏服务器之文件数据库
游戏服务器之文件数据库用于数据服务器的存取档案。设计思路:1、业务线程数据服务器进程的业务线程有3个:1)本地数据文件写线程2)mysql存取线程3)备份文件压缩线程其中,本地数据文件写线程的业务是负责文件数据库的写入。2、文件结构数据库文件类型分为:1)索引文件2)数据文件(1)索引文件索引文件的结构包括:文件头描述(FDBHeader...原创 2014-01-05 18:27:36 · 3558 阅读 · 0 评论 -
游戏服务器之存储过程查询
检查查询请求void CAccountManager::ValidateLoginRequest(const LoginRequest *pRequest){ //数据库未就绪 if (!m_AccountSQL.Connected()) { ResultLoginRequest(pRequest, -1, 0); return; } //数据库查询错误(1) if (原创 2014-07-03 17:46:25 · 1517 阅读 · 0 评论 -
游戏服务器之服务器对象
创建epoll描述符和初始化epoll事件列表(vector)nMTCPServer::nMTCPServer(const std::string &name) : name(name){ kdpfd = epoll_create(1); assert(-1 != kdpfd); epfds.resize(8);}nMTCPServer::~nMTCPServer()原创 2014-07-27 23:31:15 · 1436 阅读 · 0 评论 -
游戏服务器之线程封装
线程基类。其他具体线程类型可以原创 2014-07-07 15:21:18 · 950 阅读 · 0 评论 -
游戏服务器之数据包分配(数据包池法)
(1)申请一个发送数据包/* 申请一份发送数据包 * 当发送数据包填充内容后应当调用FlushSendPacket提交发送数据 * ★调用者申请一个发送数据包对象后必须在队列缓冲池被销毁前提交数据包; */inline CDataPacket& allocSendPacket(){CDataPacket *pPacket;allocSendPacketList(*(原创 2014-02-02 13:11:21 · 1282 阅读 · 1 评论 -
游戏服务器之数据存档(应用数据引擎redis)
逻辑服务器连接数据服务器注册句柄到ace反应器CDBMsgServer tmpDBMsgServer = CConfigManager::instance()->get_srv_config().get_dbmsg_server_conf();string dbMsgServerIp = tmpDBMsgServer.get_ip();int dbMsgServerPort = t原创 2014-03-15 14:16:48 · 2443 阅读 · 0 评论 -
游戏服务器之多进程架构通信
游戏服务器有时需要分多个进程来处理各种负载。进程类型有如下登陆服务器:创建账号,检验角色账号,选择和获取并返回网关信息。网关服务器:创建角色,转发消息。会有网关角色,和相关的屏信息,用于广播。场景服务器:处理场景(分线或不分线的)、副本的游戏逻辑。社会关系服务器:处理社交相关的全区的逻辑。数据库服务:存取数据。中心服务器:处理内部服务器之间的消息原创 2014-02-01 00:07:41 · 4119 阅读 · 0 评论 -
游戏服务器之网格屏索引
场景索引类nIndexScene ,可以让场景类继承场景索引类,可以方便场景实体索引的使用。/** * \author cjy * \description 带索引的场景基类,,封装了消息的发送 */templateclass nIndexScene : public nScene, public screen_index{ //typedef SceneEn原创 2013-11-08 22:17:49 · 2727 阅读 · 2 评论 -
游戏服务器之存档读档
场景服务器循环 if (_write_record_timer(main_logic_thread::currentTime)){//随机时间存档save(MSG::DB::WRITEBACK_TIMETICK);first_save = true;}else{if(!first_save){save(MSG::DB::FIRST_SAVE);//第一次原创 2014-07-15 14:15:46 · 2708 阅读 · 0 评论 -
游戏服务器之服务器之间的主动连接
自定义客户端连接socket1、自定义客户端连接socket启动2、创建主动连接socket线程(1)性能检测和周期控制(2)自定义客户端连接socket例程(3)创建连接socket并连接(4)连接socket收发数据3、自定义客户端连接socket关闭1、自定义socket启动创建连接socket线程B原创 2014-02-10 01:24:58 · 1613 阅读 · 0 评论 -
游戏服务器之多线程的会话管理
应用场景:游戏服务器的逻辑服务器下有逻辑网关,逻辑网关下有多个发送线程和一个接收处理线程、一个接收线程、一个监听线程。所以,接收线程和发送线程和接收处理线程、监听线程之间需要对会话的数据进行管理。监听线程会创建会话。接收处理线程需要关闭长时间不活动的会话。VOID ExecSockDataMgr::CloseSession(PRUNGATEUSERSESSI原创 2014-04-04 18:25:58 · 1616 阅读 · 0 评论 -
游戏服务器之场景范围搜索
游戏服务器场景范围包括九屏范围和几何范围原创 2014-05-21 21:27:56 · 1332 阅读 · 0 评论 -
游戏服务器之逻辑网关(在逻辑服务器中)
本文要说的是游戏服务器之逻辑网关(在单进程的逻辑服务器中),功能是在游戏逻辑服务器中就实现网关的功能。从网关派送数据包到玩家的网络数据包队列void CLogicEngine::DispatchPlayerRecvPackets(){CLogicGate *pGate;CPlayer *pPlayer;for (int nGateIdx=g_GateMana原创 2014-03-07 13:28:05 · 4250 阅读 · 0 评论 -
游戏服务器之服务器之间的被动连接
服务器之间的被动连接的设计和实现,本文的是以自定义被动连接socket来体现。功能是服务器之间的数据收发的被动连接的处理。应用如:数据服务器的数据服务器对象是继承于自定义被动连接socket的,处理逻辑服务器的连接活动。设计上:启动两个线程:(1)接收连接线程增加活动会话(2)启动数据收发线程处理所有的会话上的数据,接收数据并拷贝到缓存,和处理发送队列数据发原创 2014-02-10 00:50:15 · 1112 阅读 · 0 评论 -
游戏服务器之的数据服务器的资源框架图
数据服务处理的是逻辑服务发来的数据存取需求。程序主线程:读取服务器配置,设置数据库连接。设置文件数据库目录。设置备份文件保存时间。初始化网络(初始化监听socket、初始化接收连接线程、初始化数据接收线程)。加载屏蔽词库。初始化文件数据库。启动sql处理例程。数据引擎:1、文件数据库线程:文件数据库初始化(设置文件备份间隔、文件备份路径、文件备份时间长度、打开文原创 2013-09-23 01:51:19 · 1924 阅读 · 0 评论 -
游戏服务器之网络收发线程处理详细分析
业务网络收发线程的循环部分,处理网络数据的接收和发送。设计上:(1)先检查所有连接是否处于正常状态。(2)网络的处理是读优先的,有读才检查写,写的检查是一段时间检查一次(目前是50ms)。实现上通过两个epoll描述符来处理。第一个epoll描述符监听所有连接的读事件,并处理网络数据的接收。第二个epoll描述符监听所有连接的写事件(顺带会检查读事件),并处理网络数据的原创 2014-08-17 14:48:05 · 2020 阅读 · 0 评论 -
游戏服务器之服务器优化思路
游戏服务器之服务器优化思路原创 2014-07-16 01:59:31 · 4548 阅读 · 5 评论 -
游戏服务器之长连接服务器(python)(2)
游戏服务器之长连接服务器实现tcp连接的数据异步收发。一个网络收发处理进程,一个服务器对象逻辑处理进程。两个进程之间使用管道通信。网络收发处理进程:(1)网络处理是由反应器的子线程来处理的。(2)从管道的一端读取数据,读取管道后和网络发送前,需要前处理连包和反序列化来检查包的完整性。这里还缺少合适的连包断包处理。(3)反应器的子线程接受网络数据再写到管道。服务器对象逻辑处理进程:(1)读取网络数据并反序列化的是在服务器对象进程的一个接受循环线程里处理。并派送到服务器对象的消息队列。(2)反应原创 2014-03-16 18:13:41 · 2100 阅读 · 0 评论 -
游戏客户端之cocostudio的界面库
cocostudio 提供一些编辑工具,以及相应的控件库来接入cocos2dx的引擎。一个测试工程可参考:http://blog.csdn.net/chenjiayi_yun/article/details/22595387本文内容:1、cocostudio的控件(1)CocoWidget控件基类(2)CocoButton 按钮(3)CocoTextButton原创 2014-03-31 23:50:45 · 2329 阅读 · 0 评论 -
游戏客户端之cocos2dx客户端应用思路
1、帧缓存缓存需要的帧数据到内存。封装了cocos2dx的帧缓存2、场景基类场景创建3、层封装基类处理界面编辑器的ui初始化,及其使用的封装4、网络上下文通信资源5、服务器选择选择服务器层的接口(服务器选择面板管理层)6、主场景(1)主场景内容和跳转接口(2)主场景注册消息回调注册层上的空间的消息回调函数7、应用例原创 2014-03-11 01:45:53 · 1458 阅读 · 0 评论 -
游戏客户端之内存管理(cocos2d-x 引用计数)
cocos2dx 里的使用引用计数的对象都是继承CCObject的。引擎里大多数提供的类型是使用引用计数的。可以手动release 和retain,分别是计数减和加如果不想手动释放就调用autorelease,该对象会被放到CCPoolManager 内存管理池的当前的释放池里面(内存管理池里有内存池数组,最后创建的内存池就是当前的内存池)。内存管理池是个单例(CCPoolMa原创 2013-05-01 07:26:26 · 1750 阅读 · 0 评论 -
跑酷victorian (维多利亚人)代码分析
本文是解析跑酷victorian(维多利亚人)的代码,使用的coco2dx引擎。设计上:代理控制程序的开关、设置帧率、创建和运行场景,游戏层初始化时进入游戏主循环。游戏界面渲染在游戏层上。地形是个空白图精灵,控制所有的街区块精灵。游戏含游戏状态机(在游戏主循环),控制游戏状态。角色有角色状态机,控制角色状态。运行图:目录:1、游戏代理2、游戏层2.1、游戏...原创 2014-05-18 00:03:41 · 1505 阅读 · 0 评论 -
游戏服务器之lua脚本系统
现在做游戏的较多用脚本 ,可以热加载代码。脚本系统的目的是方便c++和lua之间的相互调用,实现c++和lua的 交互。原创 2014-01-01 17:47:23 · 6474 阅读 · 0 评论 -
游戏服务器之角色背包
背包设计有不同的做法。这里说的是物品格子的问题,这也是主要的问题。有些游戏的物品一个物品就占掉几个格子,其他的游戏使用简单的做法就是一个物品占一个格子。占几个格子的物品的设计一般是配置了物品的长和宽。这就有个问题:怎样后端判断物品之间不会重叠。效率较高的是使用图的思想,使用变量的位。如一个物品如果是2*2的,那它就要占去4个位。怎么记录呢?如果是小于64个格子的背包(一原创 2014-02-07 12:38:50 · 4073 阅读 · 0 评论 -
游戏服务器之场景和网关之间的消息同步
场景和网关之间同步消息,再发到玩家。1、场景服务器发送消息到网关服务器2、场景服务器发送消息到网关服务器,网关服务器查找对应网关玩家,并发送消息。(1)单个玩家的消息发送(2)多玩家的广播发送 3、网关调试的调用堆栈信息(以广播移动信息到9屏为例)1、场景服务器发送消息到网关服务器bool scene_player::sendmsgToMe(const vo原创 2014-02-14 12:47:26 · 2898 阅读 · 0 评论 -
游戏服务器之跨场景
游戏服务器由于要容纳更多的玩家,常常是分布式的。由于场景服务器进程可能多个,所以跨场景处理需要处理进程内或跨进程)。原创 2014-01-17 20:41:04 · 2775 阅读 · 0 评论 -
游戏服务器之分线处理
游戏服务器之分线处理处理的是游戏服务器在多场景服务器和每个场景服务器下分多场景对象的情况下的角色跳线和进入分线场景的应用的处理。设计上:(1)配置分线信息到静态表,服务器启动时加载并创建场景对象。(2)每生产一个场景对象(包括分线的场景对象)就注册到社会关系服务器。(3)进入场景或者跳线时,则查询场景服务器中的分线信息,然后选择在当前服务器下切换场景对象还是切换场景服务器。原创 2014-01-19 15:43:05 · 4020 阅读 · 0 评论 -
游戏服务器之优化a星寻路
游戏服务器之a星寻路 主要用于npc找玩家。这个是个a*算法的优化算法。原创 2014-02-20 15:46:58 · 6181 阅读 · 1 评论 -
游戏服务器之ai
ai是游戏的一个重要组成部分,指的是玩家与npc之间的相互活动。设计上:npc ai流程:逻辑线程主循环-->场景管理器遍历->场景循环-->遍历所有npc-->npc循环-->ai状态机切换和ai状态处理ai主要功能包括正常状态:ai状态切换和ai状态处理死亡状态:死亡状态机原创 2014-01-23 23:08:16 · 4102 阅读 · 0 评论 -
游戏服务器之多线程发送
本文讨论的游戏架构设计中,分为两进程(逻辑服务器进程和数据服务器进程),其中逻辑服务器进程包含多个逻辑网关,单个逻辑网关中含4类线程,发送线程是其中一种并在一个逻辑网关中存在多个,用来处理发送业务。原创 2014-02-11 19:09:27 · 1559 阅读 · 0 评论 -
游戏服务器之性能统计
class Performance_Statistics{ private: struct Performance { Performance():_times(0),_total_time(0) {} /** * \author: cjy原创 2014-06-27 17:16:08 · 1183 阅读 · 0 评论 -
游戏服务器之mysql句柄连接池
mysql_record_set* mysql_handle::exeSelect(const char *tablename, mysql_record* column, mysql_record* where, mysql_record* order, unsigned int limit_max,unsigned int limit_min,mysql_record* groupby,原创 2014-07-04 20:03:49 · 2147 阅读 · 0 评论 -
游戏服务器之消息校验
inline unsigned short calcPacketDataVerify(const void* pBuffer, size_t dwSize, unsigned short uKey){unsigned short ret = 0x;const unsigned char *pb = (const unsigned char*)pBuffer;while (dwSiz原创 2014-04-09 21:27:46 · 2034 阅读 · 0 评论 -
游戏服务器之python短连接服务器(登录服务器)
以自定义的登录协议来作为网络接收,在根据事件号来回调处理登录消息。以此来说明下使用twisted的反应器和自定义的udp协议来具体处理应用。1、登录服务器及其处理协议2、登录服务器的自定义收发协议3、用户会话1、登录服务器及其处理协议class LoginServer: PORT = 8888 _SESSION_BEGIN原创 2014-03-09 22:58:07 · 2377 阅读 · 0 评论 -
游戏服务器之长连接服务器(python)(1)
游戏服务器之长连接服务器实现tcp连接的数据异步收发。特点如下:(1)一个服务器进程含一个服务器对象(2)服务器对象包含被动连接工厂和主动连接工厂(3)两个工厂分别处理被动连接和主动连接(4)被动连接和主动连接的网络收发都在在reactor的网络线程池里处理(5)每个连接对应一个会话对象,接受的数据缓存在会话,在会话里反序列化和派送到具体的逻辑服务;会话发送数据时压入reactor网络线程池的队列里处理原创 2014-03-15 20:01:31 · 2750 阅读 · 0 评论 -
游戏服务器之自定义内存池管理器和空间配置器
游戏服务器之自定义内存分配器的实现:对于内存分配器nMemoryAlloc,其中含有针对不同内存大小的内存池数组。内存池对象含有空闲节点链表,记录分配和回收的节点对象内存。节点对象含有变长内存成员,适合分配各个长度的内存对象。内存分配器nMemoryAlloc对于内存大小在1~1024 * 1024 字节之间小对象使用内存池的管理,否则就使用系统默认的分配和删除接口,让系统管理内存。注意:这里原创 2014-03-27 15:33:04 · 974 阅读 · 0 评论 -
游戏服务器之ace的反应器应用思路
ace处理事件是以在反应器中注册事件的方式来处理的。1、注册监听句柄2、注册接收数据句柄3、事件句柄4、主动连接(1)连接基类(2)服务器连接5、注册定时器1、注册监听句柄注册监听句柄,处理接收连接 在主线程的主函数里:生成epoll反应器对象ACE_Dev_Poll_Reactor*原创 2014-03-09 21:07:47 · 1011 阅读 · 0 评论 -
游戏服务器之防加速器
在网关服务器里限制连接发来(客户端发来)的移动系统里的角色移动消息,根据消息的时间戳跟服务器的时间相比,时间相差较大就踢掉.原创 2014-05-04 20:00:11 · 2783 阅读 · 1 评论