苍月小筑

苍月小筑

Life is about making everyday count.

笔记

VS2008 WIN32升级VS2017 X64

工程配置修改 1. 用vs2017打开原vs2008的工程,自动升级工程。 2. 修改所有Project的Windows SDK Version(默认升级完会变成8.1,但是VS2017自带的是10.x.x) 3. 新增X64平台配置。 4. 覆盖提供的tq_lib目录,修改MsgServer和NpcServer工程的库包含路径: mysql->mysql64 lib->lib_X64 GameLib->GameLib_X64 5. 覆盖提供的游服运行环境(X64运行环境DLL.rar)到游服运行环境目录sjmy_server_bin。(请注意备份原来的运行环境,建议新建一个sjmy_server_bin_X64来运行X64的游服)。 源码修改 1. hash_map已废弃,需修改为unordered_map: #ifdef USE_
3 min read
版本管理

SVN全局忽略匹配表达式

不错的一组SVN全局忽略匹配表达式,记录下来备用。以后重装SVN的时候再也不用到处找了。 可复制黏贴模式 *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store thumbs.db Thumbs.db *.bak *.class *.exe *.dll *.mine *.obj *.ncb *.lib *.log *.idb *.pdb *.ilk *.msi* .res *.pch *.suo *.exp *.*~ *.~* ~*.* cvs CVS .CVS .cvs release Release debug Debug ignore Ignore bin Bin obj Obj *.csproj.user *.user *.generated.
1 min read
游戏开发

RakNet参考手册索引

RakNet开源免费了,接下来准备学习一下,计划把RakNet的文档做个翻译。就从手册开始吧。原文链接。 介绍 手册最后更新时间 2012-11-19。 查看readme.txt文件获取当前版本号。 RakNet是为游戏或者其他高性能网络应用设计的一套高性能的网络API。 RakNet致力于提供现代游戏所需的绝大部分的功能特性,如Master Server(主服务器),autopatcher(自动更新),语音聊天和跨平台兼容性等。RakNet当前支持Windows, PlayStation 3, XBOX 360, PlayStation Vita, Linux, Mac, the iPhone[1], Android,和Windows Phone 8。 快速入门 多人游戏的组成 系统概览 实现细节 教程 编译设置(Visual Studio) 编译设置(XCode) 可选的第三方依赖项 操作方式 教学视频 介绍:
8 min read
疑难杂症

Mactype配置文件

**LCD.ini** [General] Name=LCD Icon=..mactray.exe,012 HookChildProcesses=1 【应用到子进程】——比如你用启动方法1启动了一个winrar,双击里面的一个文本文档,那么下一步被打开的“记事本”程序也会使用gdi++渲染。 0:禁用; 1:启用。 HintingMode=1 ; 0:Normal 1:NoHinting 2:AutoHinting 3:Light+AutoHinting 【字体微调】——对字体进行细微调整,以实现比较锐利、不模糊的效果。windows的cleartype就是用的这类技术,弊端是会使字体变形、笔画粘在一起。 下面会有两种情况: 情况一,当FontLoader=0(在下面)时: 0:使用字体内部的微调,字体内部没有微调的话就和选1时的效果一样; 1:
6 min read
游戏开发

Lua语言学习笔记

自学过Lua好多次,每次都因为长时间没用然后忘记了。这次决定做一下笔记,一方面加深印象,另一方面为了下次忘记能够快速“捡回来”做准备。 参考教程:菜鸟教程之Lua教程 参考手册:Lua5.3参考手册 斜体部分为我个人的理解,可能不一定正确,只是帮助记忆。 [TOC] 注释 单行注释 --是单行注释: --这是单行注释 多行注释 --[[]]--是多行注释: --[[ 这是多行注释的第一行 这是多行注释的第二行 ... ]] 标识符 我喜欢称之为变量名。规则同C/C++。字母或者下划线_开头,后面跟字母、数字或者下划线。 关键词 即系统保留关键字。一般约定,以下划线开头连接一串大写字母的名字(比如_VERSION)被保留用于Lua内部全局变量。 and break do else elseif end false for function if in
45 min read
游戏开发

3D地图和场景管理

其他项目的做法 * 方案 1. 将场景用八叉树划分,最多三层 2. 物体根据坐标直接加入八叉树的叶节点(忽略了体积和包围盒) 3. 移动采用完全相信客户端的做法 4. 通过MoveState来记录移动过程,客户端上传开始位置、结束位置、持续时间信息,服务器根据开始位置和结束位置、以及时间计算出速度。 5. 只有在其他对象主动查询或者RegionSwitch的OnTimer时候,才会做移动,八叉树节点切换 6. 如果没有主动查询,中间过程是没有体现的 * 疑问 1. 如果出现网络延迟,客户端中途改变移动方向或者目的地点时,两端的位置会有严重偏差,这时如何同步? 2. 如果地面上有陷阱,在起点和终点之间,是否会被触发? 3. 忽略了体积的情况下,如何做碰撞检测? TrinityCore的做法 TO-DO 我的想法 1. 场景用八叉树管理,在八叉树中只保存动态物体,如玩家角色、NPC、怪物、子弹等,姑且称为动态检测。八叉树可以用来做广播和碰撞检测,
3 min read
游戏开发

3DMMO游戏服务器架构

服务器框架 备选资源 1. NavMesh 2. 3D碰撞检测 3. 网络通信 * 连接协议 * RakNet * ENet * libuv * 消息协议: * ProtoBuf * MsgPack * BitStream:RakNet集成 网络通信协议的选择 * 结论:由于客户端最后选择了UNITY3D引擎,所以有些选择考虑到客户端的实现做了妥协。最后选择了libuv+byteStream,并且自己做了一层封装,起名为UVSocket。代码我提交到了oschina。 代码库:UVSocket * 原因: * 首先,如果不考虑客户端,我的首选会是RakNet,毕竟是老牌的游戏通信库,而且UDP从延迟角度来说也更适合用于网络游戏。并且收发包没有分包合包的烦恼。但是RakNet并没有官方的C#实现,因此客户端担心和
4 min read