自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 资源 (1)
  • 收藏
  • 关注

原创 重视工具脚本的健壮性

flsg在最近遇到过两个问题,第一个问题是内网更新后端表格的脚本,在把策划目录表格复制转码到程序目录时,时不时的会出现大规模复制错误,文件混乱的问题。检查脚本文件,发现逻辑也很清晰,先svn更新策划表格,然后将整个策划目录转码并复制到程序目录表格,没什么问题。但是脚本里面对文件进行读写没有加锁,那么当多个脚本实例同时运行的时候,就会出现上述的问题。所以三国这边新增的策划更表功能导致这个问题频繁出现

2017-11-04 07:18:58 325

原创 在使用actor模型的游戏后端框架中添加单元测试

一直在思考如何在flsg这个使用Actor模型的后端页游框架中加入单元测试。 单元测试首先,我们要定义单元和测试这两个概念。通常单元都是指以类为单位, flsg中也不例外,但是由于flsg使用actor模型,我们可以将一个actor视为一个单元,当然每个actor其实也是一个类,但不是每个类都是一个actor。在非actor类中一样可以添加单元测试,但这与其他代码中的单元测试并没有多大

2017-08-16 11:06:37 1150 1

原创 enable_shared_from_this

简介当在项目中使用shared_ptr来管理对象时,会面临一个很尴尬的问题,如何从对象中获取指向它的shared_ptr?直观的写法如下? return shared_ptr<T>(this);但是这么写会造成对同一个对象创建多个智能指针,且这些智能指针不会共享引用。而继承enable_shared_from_this的对象调用shared_from_this()可以保证得到智能指针共享引用。

2017-07-06 09:32:00 237

原创 flash中帧动画的处理

简介游戏中使用的帧动画源文件是一张大图和一份xml描述文件,大图是美术用打包工具将模型动作的每一帧去除空白区域后粘在一起形成的,xml描述文件描述了每一帧在大图中的位置及大小,以及被切除的空白部分的信息,具体如下图: 上图以B为定点的矩形就是每一帧的画布(不同帧相同),以A顶点的矩形就是该帧非空白部分,也是我们游戏中需要绘制的部分。由于不同帧切除的空白区域不同,所以如果直接绘制每帧图案,不同帧之间

2017-06-30 14:35:10 772

原创 回调函数与状态清理

最近公司有个同事在做模型移动时发现了一个奇怪的bug,就是移动完成之后再移动带下一个点不会生效,而且这个bug可以稳定重现。但是他搞了两天都没找到原因,我便抽了个时间帮他看了看。最后发现是回调函数和状态清理没有处理好,moveover函数里面是先调用回调函数再将isActiving置为false。在回调函数里调用移动到下一个点时,isActiving还没有被置为false导致没有生效。再拓展一下,回

2017-06-25 08:33:17 687

翻译 linux下top文档浏览

命令行参数top -hv | -bcHisS -d ++delay++ -n ++interations++ -p ++pid++ [,pid…]-b : Batch mode top只执行有限次数,由 -n 指定或者直到被kill-c : Command line/Program name 切换-d : Delay time interval as ss.tt(秒.十分之一秒)刷新间隔-h

2017-06-24 19:38:35 560

原创 游戏服务器日志杂谈

简介我们游戏服务器是使用异步请求的方式来执行玩家的每一项操作,现在的日志系统主要记录了服务器接受到的网络消息已经发出的网络消息,最近在修正bug时发现了现在log策略的一些缺陷,导致定位问题困难。返回值玩家的每个请求都有失败的可能,那么由于什么原因失败,该请求最终执行的结果是怎样,一定要在该请求的response中体现出来。我们游戏中有一个eErrorInfoGeneral, 之前有同事开发的时候不

2017-06-02 11:57:31 2475

原创 skynet源码解析:计时器

简介skynet中提供了一个简单的计时器实现,可以设置一个超时时间,时间到达后给对应的服务发送消息,这篇文字主要是讲讲该计时器的实现。skynet中没有使用signal信号的方式来实现计时器,而是程序自身进行计时并处理计时器事件。另外,skynet中将时间由近及远划分为五个level,在时间复杂度和空间复杂度上达到了平衡。API下面列举一下skynet_timer.h 中提供的public API:

2017-05-24 20:37:30 2543

原创 服务器开发过程中关于计时器的处理

简介游戏服务器开发过程中经常会需要使用计时器来触发相应的事件,这篇文章主要是将什么时候需要使用计时器,什么不是不需要使用计时器,以及对于用一个例子来说明一些关于计时器的处理。需求描述我需要开发一个活动,该活动分为三个阶段,第一阶段为早上十点到下午六点,该阶段玩家可以每隔两个小时领取一项物品;第二阶段为下午六点到下午八点,该阶段玩家可以贡献物品,全服贡献的物品数量会影响下一个阶段玩家获得奖励的品质。第

2017-04-29 16:10:34 1211

原创 战斗死亡结算

现在后端的战斗里有一个问题,有的角色在死亡之后又因为回血的原因重新复活,导致前端战斗出现显示bug。对于这个问题,我首先想到的解决方案有三个: 1. 每次加血的时候检查该角色有没有死亡,若死亡,则不给其加血 2. 阶段性的检查角色死亡状态,角色在阶段中死亡可以加血复活,跨阶段则不可以 3. 角色每次扣血后死亡及时生效我们下面仔细想想这三个方案。首先,对于第一个方案,实现

2017-01-29 17:12:42 507

原创 sproto parse方法解析

一 简介sproto是云风设计的一个客户端服务端通讯协议,设计思想可以看云风的blog, 其实现中提供了一个sproto.parse 方法, 可以将sproto的schema描述文件转变为二进制字符,这样,项目中只需要使用转变后的二进制字符就可以知道客户端与服务端之间的通讯协议了。本篇博客主要就是分析parse方法的实现。二 sproto schema 要做哪些事.Person {#类型 Perso

2017-01-14 20:45:05 2940

翻译 LPEG库简介

LPEG库简介LPEG是一个供lua使用的基于 Parsing Expression Grammars 的模式匹配库,这篇文章只是讲其如何使用,并不涉及底层如何实现。LPEG 的函数主要分为三类,第一类是创建Pattern的构造函数,第二类是 Capture 函数, 第三类则是 match 等函数。 Capture 就是指一个Pattern,当前匹配时会产生某些捕获的值。Match 等函数lpeg.

2016-10-23 22:43:01 8346

原创 游戏项目中的资源加载管理

游戏项目中的资源加载管理简介资源加载主要需要注意以下几点:资源加载时的缓存,停止,恢复资源加载时的处理资源加载未完成与未完成时的处理资源加载时的恢复与暂停以及缓存项目中使用的工具BulkLoader,该工具提供了一系列基础的资源加载操作,资源的加载,暂停,缓存,是否加载成功或失败等。这并不是这篇文章所讲述的重点,本文主要是讲述基于这些基础操作之上的一些封装。资源加载的相关处理资源路径项目中所

2015-11-14 17:21:42 2210

原创 AS3.0 中的 变量回收机制

简介策略 Incremental Mark and Sweep移除对象移除事件总结简介简单地来说,AS3.0 中的变量回收机制可以用一句话概括,当对象在程序中不能被访问到时,其就会被垃圾回收所标记,但不会被立即回收。当程序所占空间达到极限时,可回收的对象才会被回收。策略: Incremental Mark and Sweep我们并不能知道被标记为可回收的对象何时会被回收,最理想的状态时,当一

2015-10-07 13:09:03 811

原创 gdb 调试string

更透彻的理解还需要看stl得具体实现#include <assert.h>#include <iostream>#include <string>#include <vector>using namespace std;int main (){ string a = "0123456789abcdefhgjhgghjgjhghghjghghghghjgjhjghghj" ;

2015-03-25 14:25:52 2183

翻译 c++ stl容器 vector详解

一、简介     顺序容器是拥有单一类型的一个有序集合,vector ,list(双向链表),queue(队列);     关联容器支持查询一个元素是否存在,也就是对元素进行排序的容器,map(映射),set(集合)。map 每个元素拥有两个数据,一个是索引,一个是值,而set只相当于一个排序后的集合。二、vector     vector是一个顺序容器,相当于一个动态数组

2014-08-29 21:21:04 497

原创 win7 64bits opencv2.4.6+vs2012配置

一、到opencv官网下载opencv2.4.6 windows版本,运行解压到D:\\opencv\\opencv二、打开vs2012,创建控制台项目平台改为x64;包含目录中添加D:\opencv\opencv\build\include;D:\opencv\opencv\build\include\opencv;库目录中添加D:\opencv\open

2013-08-20 22:29:44 715

php+mysql简易图书管理网站

适合初学者学习,使用php语言和sql语言所写的图书管理网站。以及设计报告

2013-07-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除