自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

醉大饿极的专栏

美貌与智慧并重,游戏和网络的化身

原创 通信协议

在传统的互联网应用中,通信协议通常被设计成文本方式,这是一个广泛而基础的网络信息交互,互联网本身是不局限于操作系统,编程语言,PC,终端,手机等具体平台和技术。所以协议的设计应足够通用。而在网络游戏中,为了简单和方便,通信协议通常是专用的,我们通常会具体到特定语言和平台来设计协议。回顾以前我参与的项目,在通讯协议的设计上也是一步一步的改进的,在最早期的协议设计,我们采用简单的二进制结构描述

2010-03-19 23:13:00 2092 3

原创 D3D修改浮点数精度

前几天策划要求给任务系统加上日常任务的功能,这个需求很简单:象wow一样,日常任务在每天某个时候定时刷新。在思考添加这个功能时,很直接想到的方案是服务器取出3个时间:任务上次完成时间(pre),当前时间(now)和当天刷新时间(refresh),然后经过一些较复杂的逻辑完成(此处省略xx字)。由于该方案需要涉及一些时间操作,而在lua和c

2010-02-15 14:58:00 2116 7

原创 用WPF做编辑器UI

最近在抽零碎的时间做特效编辑器的UI部分,和同事讨论了一下,采用WPF开发UI部分,其理由比较简单,该编辑器是为GameBryo服务的,而GB本身大多数编辑器的UI框架都采用C#开发,ToolBench部分采用WPF(WinForm中嵌入WPF),而C#本身比较适合做这类工具开发,.net又具备

2010-01-11 21:05:00 6600 4

原创 反思c++

Normal 0 7.8 磅 0 2 MicrosoftInternetExplorer4 今天尝试封装一个lua到c++的绑定,突破了很多细节问题,在快要完成的时候发现走不通,其结果自然是令人

2009-12-20 22:41:00 1188 4

原创 GameBryo中全视角第三人称摄像机的实现

全视角的摄像机大致需要以下功能1 平移——拉近,缩放    这个应该是摄像机最简单的功能了,在操作上体现在玩家直接滚动鼠标滚轮来拉近和放大摄像机的距离。该操作的本质是平移摄像机。具体做法可捕获鼠标滚轮消息,然后在该方向上进行平移(简单的坐标加减即可)2 跟随主角      在主角进行移动的时候触发该功能,这个也比较简单,平移摄像机位置即可3 旋转——俯仰

2009-12-05 12:39:00 2218

原创 用了一段时间Gamebryo了

    用了一段时间Gamebryo了——做了2个月的demo,由于一些不可抗拒的因素,demo被迫喊停,我和另外一个同事被调到了项目组,做了2个月的东西完全被否决掉,心头总是有些失落的。最近在反思的同时也想把使用Gamebryo的感受记录下来。  首先说明,在3D方面我就是一打酱油的,也就知道那么点基础概念,所以这篇文章的内容和所表达的观点可能会有一些偏差。  首先,Ga

2009-10-14 20:45:00 7910 7

原创 游戏服务器的架构设计

    游戏服务器的设计是一项颇有挑战性的工作,游戏服务器的发展也由以前的单服结构转变为多服机构,甚至出现了bigworld引擎的分布式解决方案,最近了解到Unreal的服务器解决方案atlas也是基于集群的方式。负载均衡是一个很复杂的课题,这里暂不谈bigworld和atlas的这类服务器的设计,更多的是基于功能和场景划分服务器结构。首先说一下思路,服务器划分基于以下原则:1

2009-10-10 21:34:00 1390

原创 搭建可复用的游戏服务器框架的思路

网络游戏公司成长到一定的阶段,会有一些经验和技术的积累,这些积累会在日后的游戏开发使用,但如果背负了过重的历史包袱,就应该丢弃,开发一套全新的架构在适应现在的游戏开发技术需要。而我,最近就在考虑一个可复用的服务器框架,这个问题思考已经不是一天两天的事情了,但还未正式开始实施。框架设计目的1:加快游戏开发过程,缩短开发周期——设计和代码的复用2:提高产品质量——由所谓的“精英

2009-08-19 19:52:00 1421

原创 宕机,回档,亡羊补牢之外我们是不是应该做些什么

      网络游戏在封测,内测,直至公测期间,宕机回档几乎是家常便饭,游戏开发商焦急的在玩家的抱怨声和流失的过程中做着亡羊补牢的事情。我有过这种经历,公测时的火爆和几个月后的冷清形成了鲜明的对比。这对公司的损失是相当大的,前期投入的巨额广告带来的效益也付之东流,再在后期游戏稳定后依靠运营手段把玩家拉回来变得相当困难并且成本不菲,基于这种事实,很多人会把责任推向程序员——没能提供稳定的发布

2009-07-19 23:13:00 1136 1

原创 堆调试工具——pageheap的使用和原理分析

 今天调试一个bug,用pageheap解决,在此记录一下。bug症状如下:1:不确定性崩溃,用vs调试启动每次崩溃地点都在crt分配或者释放堆的位置2:崩溃时vs看到的调用栈可能不同3:output输出HEAP: Free Heap block 388c58 modified at 388c88 after it was freed问题分析:根据vs的输出,确定问题是在一块堆上分配的

2009-05-12 23:07:00 12193 5

原创 boost::bind 源代码分析

boost::bind库绝对是最有用,最有价值的库之一,已被纳入tr1。bind库的出现,替代了stl中的mem_fun,ptr_fun,bind1st,bin2nd等函数本文并不介绍bind的使用,而是从bind的源代码(boost1.38.0)中分析出它的实现原理bind执行大致可分为2个过程 1:构造函数对象 2:调用函数对象下面我们以以下代码为列,抽丝剥茧,分析bind的内部机制。#i

2009-05-10 10:12:00 6971 2

原创 跨平台网络库的设计

         近期在开发一个跨平台的网络库,其目的是为了封装网络底层细节,对外提供一个简易的接口,在这里记载一下设计思路。     网络游戏服务器通常需要2种网络IO:一种是面向大量客户端连接的高连接数的网络IO,一种是服务器间的低连接数,高吞吐量的网络IO,后一种网络IO比较简单,可采取阻塞或者异步的网络IO模型。第一种通常需要采用IOCP,epoll等支持高并发的网络模型。

2009-04-25 19:04:00 2288

原创 关于多核的发展对网络游戏设计影响的一些思考

    早在几年前,Herbsutter就发表了《免费午餐已经结束,软件历史性的向并发靠拢》一文,引起了业内很大的反应,现在双核早已普及,09年应该是国内普及4核的一年。Erlang这种老古董也因为多核的发展而逐渐热起来,网上关于普通程序员是否需要掌握多核编程技术也有很多争论,不论大家观点是否正确,至少多核相关技术引起了开发人员的注意。    我是做游戏服务器开发的,公司的老游

2009-01-21 11:46:00 1695

原创 Ubuntu安装后的配置

1:选择更新源    Ubuntu默认的更新源可能很慢,在系统-系统管理-软件源-下载至下拉列表中选择其他,然后点击 选择最佳服务器按钮测速,完成后使用测出来的更新源 2:汉化    Ubuntu8.10在安装的时候会选择语言,虽然选择了中文,但是装完系统后会看到一半中文一半英语的情况。在系统-系统管理-语言支持中选择汉语,应用后会更新语言包。再reboot系统。这个步骤完成后自动

2008-11-25 19:52:00 5082 17

原创 安装配置bugzilla(windows平台)

      最近项目需要一个bug管理系统,到网上查了一下,本来准备随便找一个轻量级的缺陷跟踪系统来用用就可以了,但后来想想,这种系统其实在整个软件生命管理周期都起到了很重要的作用,还是需要一个专业级的工具,抱着“bugzilla,名厂名牌,用它,准没错”的心态,把它给看上了。      都说bugzilla的安装和配置比较麻烦,尤其是在windows系统下,由于我也是第一次安装,经常出点小问题,

2007-05-20 15:59:00 3981 1

转载 Automation 服务器不能创建对象 错误解决(转)

"Automation 服务器不能创建对象" 的解决方法 如果出现"Automation 服务器不能创建对象"的错误提示框,表明对象需要scrrun.dll的支持,可以尝试下面的方法:开始--运行--regsvr32 scrrun.dll不用重新安装操作系统和vs.net 有些脚本需要微软的 MSXML 控件才能进入。当使用 IE 5 以上版本的缺省安全模式时,会提示是否接受 MSXML 控件,如

2006-11-10 15:32:00 4906

原创 通过reg文件给vc7.1添加环境变量

如果某个vc工程需要手动添加n个自定义的环境变量,是一件很烦人的事vc6中,直接可以用reg文件修改注册表,对vc添加include,lib等环境变量,方法是打开注册表,找到vc6的相关路径,然后导出该项成一个reg文件,然后在用文本编辑器修改该reg文件后,再执行reg文件,则达到了修改的目的。 而在vc7中这样做却不行,搞了很久,发现vc7的用户自定义的环境变量保存在/Docume

2006-09-25 23:27:00 1589

原创 郁闷的Loki::SmartPtr

最近做的项目,需要在多线程中管理资源,很自然就想到使用智能指针搭配引用计数的技术构造垃圾收集回收机制。首先考虑的是采用loki中的SmartPtr,并且已经在项目中运作,现在才发现Loki::SmartPtr并不是想象中的灵活好用。问题在于SmartPtr的构造函数(用原始指针构造出智能指针对象):  SmartPtr(const StoredType& p) : SP(p)        {  

2006-09-03 22:31:00 2975 6

原创 解决多重继承中函数同名方案

当两个接口中有相同的函数声明名,比如:interface IA{    virtual void Fun()=0;};interface IB{    virtual void Fun()=0;}; 类CD继承这两个接口:class CD : public IA,public IB{public:    void Fun();}; 如果要实现这样的效果:针对IA和IB的接口函数Fun有不同的实现,

2004-07-09 21:56:00 4191

原创 配置Serv-U的数据库连接

Serv-U的老版本(好像是4.1以前的版本)依赖插件进行数据库的连接,而目前的最新版本5.0.0.9提供了对ODBC数据库的支持,以下是access数据库的配置过程: 1 创建一个数据库文件,假设为servu,在该库中创建一个表,假设取名为user,在表中创建4列,假设分别取名为:username,password,accessrule,homedir 2 创建ODBC数据源,假设创建一个叫TE

2004-07-09 19:38:00 4605 1

原创 atl中常见的模板使用手法

1、传入基类,继承实现在设计com接口时,经常会遇到这样的情况:设计一个基接口,其他多个接口继承该接口。一个典型的例子是IUnknown接口,所有的com接口必须从IUnknown接口继承,而这些接口的实现都是相同的,我们不可能为每一个com接口写一个IUnknown接口的实现。IUnknown接口的实现比较复杂,分布在几个类中(可参考《深入解析atl》)。比较直观的一个例子是IDispatch接

2004-07-09 18:54:00 2488

原创 模块复用——c++类、dll和com

    这篇文章只是对c++、dll和com的泛泛而谈,更为详细的内容请参考《com本质论》,这篇文章也算是《com本质论》第一章的读书笔记或总结。如有不对之处,希望大家批评指正。在windows下使用c++编写代码的人代码复用的常用方式大概就是c++类、dll和com一、c++代码重用的缺陷    以前的c++开发人员复用代码的方式大概就是获得一套.h和.cpp文件,然后把这些文件加入到自己

2003-12-29 11:03:00 2088 2

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