战魂小筑

讨论群:309800774 知乎关注:http://zhihu.com/people/sunicdavy 开源项目:https://github.com/davyxu

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  257 随笔 :: 0 文章 :: 506 评论 :: 0 Trackbacks

#

一直不是很清除VC的断点保存于何处,让我们看几个证据:

  1. 多人开发中,经常更新别人的代码后,突然停在某个自己没打过的断点上,我们组称之为附送断点。
  2. 并且无论VSS还是SVN等代码管理工具都会出这样的问题。但是你提交的只有代码,没有其他单独的配置文件
  3. VC2005中,即便打过SP1,也会碰到某个文件突然无法打断点的BUG(排除没有重编,打错文件断点等低级错误),解决办法是:打开记事本,将这个文件的代码全部粘贴到记事本,再帖回来
  4. VB中的代码文件,使用记事本打开时,可以看到比IDE里看到更多的配置型代码

综上所述,基本可以断定VC的断点被保存于代码的尾部的某个位置,看不见的一些字符

posted @ 2009-06-10 17:36 战魂小筑 阅读(546) | 评论 (0)编辑 收藏

    目前项目中使用Flash为主设计的UI,因为兼容性问题,Flash中编辑框虽然可以输入中文,但是光标是看不到闪烁的。经过仿佛研究发现,必须将d3d 的flash容器程序在后台时,才能显示光标,这一个测试结果让我们雷的不行。最终决定将flash拆解开,每个界面一个flash。但依然发现很多影响开发效率的问题。

    GameBryo引擎中支持原生的C++ GAME UI,也支持直接播放flash,这部分(ScaleForm)使用的是以GameSwf为基础的手动解析flash文件,因此在编辑框等方面做的非常好。

    Flash的UI开发灵活度很高,底层库bug少,但是与现有工程结合难度大,因此仍然转向研究以XML为基础的UI库设计。

    这里推荐几个参考:

    WowBench: http://sourceforge.net/projects/wowbench/

        这是魔兽世界的UI的模拟器,开源,可以从中了解魔兽世界的基本UI架构及API构成。同时,魔兽的lua脚本在安全性和开发度上做的非常好,这部分可以参考下。

    Mozilla XUL:https://developer.mozilla.org/En/XUL

        这是Mozilla战略中的一个重要组成部分,这套UI支持类似于wxWidgets或者HTML方式的排版

posted @ 2009-06-08 14:01 战魂小筑 阅读(1762) | 评论 (0)编辑 收藏

    腾讯新产品线:QQ2009, QQ 旋风2,QQ影音等都使用了非常漂亮的界面。一直以为是自己写的,毕竟QQ2009需要一个安全的环境以避免外挂的衍生。经过spy++探测,发现一个TXGuiFoundation,再在网上一搜,搜到了这个东西:

    DSkinLite: http://uieasy.cn/downloads.html

     Dskinlite 是一款轻量级的C++皮肤库,使用XML文件根据规则来管理GDI资源如颜色,字体,图片,并描述界面构成,最大程度的将界面和程序逻辑分离,同时为软件皮肤更换,换色等提供基础支持。DSkinLite将界面构成元素抽象为线条元素,矩形元素,图片元素,文本元素,并提供相应规则来使用这些元素"组合"界面。DSkinlite开发团队有较深的Windows界面开发的实际经历,对软件界面处理颇有心得,致力于将实用,高效,前沿的界面处理技术介绍给广大开发人员。

        DSkinLite与其他界面库相比有以下特点: 没有采用Hook所有进程消息的方式,因此没有替换系统相关对话框。DSkinLite只是采用MFCATLframework类似的方式,简单替换窗口过程,截取界面绘制等消息,对应用程序来说基本上是透明的。从这个方面讲,DSkinLite是一款轻量级的界面库。 同时,DSkinLite没有特别的Frameword的依赖,可以在Win32MFC,ATL,WTL等环境中使用。 DSkinLite界面库使用XML管理GDI资源并配置窗口界面,用户可以方便的保持界面的一致性,同时可以很方便的构造出更多的窗口样式 界面库的高效性。DSkinLite将专注于程序库的高效性,具体表现在内存占用,界面绘制速度,界面防止闪烁,程序加载图片资源、解析XML文件的速度等方面,我们做了很多工作,并不断持续优化。以期望程序各方面表现最为高效的界面程序库。 
        DSkinLite
皮肤库的程序架构考虑到可能出现的界面特效,使得实现诸如透明,渐隐渐显,动画等界面特效变得更加容易,目前支持大多数控件的透明效果,后续会根据用户需求,开发更多的实用的界面特效。

使用XML配置控件的界面

  • 使用XML定义GDI资源(颜色,字体,图片,cursor
  • 使用XML配置控件的界面风格
  • 绘制元素被抽象为线条,文本,矩形,图片
  •  

    XML语法简单,易于学习和掌握

     

    其他关键特性

     

  • 基于Win32 API,没有framework依赖。
  • 支持大多数标准控件
  • 支持改变皮肤色调
  • 支持大多数控件透明,包括子窗口透明
  • 支持动画效果
  • 支持png, bitmap, gif, ico图片格式。支持带透明通道的png图片
  • 支持将皮肤文件打包到一个文件
  • 支持Unicode
  • 支持Popup Menu等,包括不规则的menu window
  •  

    支持滚动条控件,同时支持所有内置滚动条控制

       

    该网站还提到一个DirectUI的东西,这个东西是一种windowless的架构,具体概念类似于游戏中的UI,不依赖平台句柄,因此外挂只能截取诸如QQ基于ATL的外窗口,但是无法获取窗口内部的数据

 

posted @ 2009-06-08 13:36 战魂小筑 阅读(6068) | 评论 (3)编辑 收藏

    Svn现在已经是非常流行的代码管理,虽然vss更容易接受。但是真正方便的而强大的却是git。

    这个东西没有独立服务器提交代码,每个本地都是一个代码库,包括log等等。而且代码管理文件夹不像svn每个文件夹都有,更不像vss用只读文件的巨傻办法来做,git使用的是独立一个文件夹来做,简单而又简洁

    这里记录git的安装方法和使用说明以便下次快速索引

    说明和下载:http://hi.baidu.com/mcspring/blog/item/171b1e38986d39fab211c71b.html

使用指南:http://www.linuxgem.org/2008/8/1/git-tutorial.4889.html

一分钟指南:http://blog.enjoyrails.com/2008/12/31/git一分钟教程/

更直观的教学:http://hi.baidu.com/proteus/blog/item/6ec19322c2a39cf4d6cae22d.html

posted @ 2009-06-03 23:50 战魂小筑 阅读(2625) | 评论 (1)编辑 收藏

    10年前的广播节目中大概都有这么一个设计:某某节目开始,让听众打进电话。一般不会像声讯台那样设置很多的接线员,因此电台会设置一个导播来接听电话,打不进来的听众就只有在接通电话后等待着。这样做,用户体验其实并不好,时间长了,别人会认为怎么你那电话怎么老是打不进来。

    四川电台经济广播每天早上9点开始的人气节目《方言社会》是这样设计的:主持人会随机选择一条成都的街道,让在这条街道上的听众打进电话来说他看到了什么,然后获赠诸如电影票之类的东西。这样分析下来,没有在那条街上的人自然也就不会打进电话进去。毕竟在那条街上还听这个节目的听众比起整个四川人口来说还是算少数。

    因此这就是很好的一个负载平衡的小例子

posted @ 2009-05-27 17:33 战魂小筑 阅读(381) | 评论 (0)编辑 收藏

    最近聊天系统测出一个问题:测试人员使用的是韩文操作系统,在上面安装了搜狗中文输入法。他们互相之间发送韩文聊天是没有乱码的,但是我们和他们互相以中文发送时,会出现乱码情况。随即进行测试发现以下问题:

    对于 "德国"

    他们发送的编码数据为 d3 ec 3f

    而我们的中文系统为 b5 c2 b9 fa

    因为聊天系统采用ANSI的架构,但是为什么同是东方语言系,一个会是UTF8,一个是ANSI双字节,因此将聊天系统整体发送换成纯UNICODE进行测试

posted @ 2009-05-20 11:32 战魂小筑 阅读(636) | 评论 (2)编辑 收藏

    朋友催促下,想很快的做出新一版的战魂,并且添加这4年多来自己所有研究出来的高科技!

    对于大量的子弹弹幕和高速微操控制,只有帧同步能解决这个问题,但是中国国内对于帧同步研究的人很少,国外也少见这类文章,甚至用google都很难搜到,难不成是我用错搜索词?

    大学时期曾经看过一本重庆大学出版社出版的游戏编程。基于DX8写的,很基础,里面还记得有王鑫写的帧同步的基本原理。

    这里个人总结下:

  1. 帧同步,顾名思义:就是每一帧都同步,所以就是真同步
  2. 由于数据量巨大,一般使用UDP做发送
  3. 要做到数据的绝对同步,延迟不能太大,最好能在局域网来做,延迟20ms以下
  4. 如果要在公网传输,由于采用的是P2P传输,因此,UDP的打洞也是必不可少的

因此,可以先定下采用的网络库是Raknet(http://www.jenkinssoftware.com/),从网上down了一个下来看视频,还是很强大的,虽然用的项目不是很多。不过用于个人的项目已经足够了。

    Raknet和XNA下的网络库很类似,支持可信赖的UDP发送。由于是自定义的传输方式,同时,没有TCP的负载均衡的复杂算法,因此网络传输速度可以很快

    在游戏中的帧同步,在我的考虑将是这样的:

  1. 游戏中的逻辑帧与渲染帧是不同步的,逻辑帧也许远远低于渲染帧
  2. 对于一个使用elapse值在逻辑控制下移动的物体,这个移动算法必须能被时间插值。
  3. 那么我们将这段时间进行分段,每一段就是一帧。我们为这些帧进行编号,类似于封装TCP协议一样。这些编号更类似于指令号。
  4. 游戏中有一人被作为服务器使用,每个玩家将自己的操作编码成指令后发送给这台服务器,由服务器统一分配序号广播给所有的其他玩家
  5. 对于可以被时间插值的动画轨迹(寻路),那么将发送轨迹(如果寻路算法出来的结果是唯一的,就只需要发送起点跟结尾点)以及每帧更新这个物体的时间插值参数。
  6. 由于外界输入对系统的干扰,才产生了需要同步的数据。外界输入干扰保护用户操作和AI
  7. 考虑到每人的网络ping值的不同,对于特别慢的玩家,可能在其广播指令时,其他玩家已经走出很多步,因此需要计算一个平均ping值,当网络中某人的ping值低于这个值时,将弹出类似于魔兽/星际的同步对话框,等待其本地指令序号赶上其他玩家的序列号
  8. 由于所有物体的移动都可以被时间插值,因此,游戏中的每一逻辑帧,只需要将本地服务器在上一帧的ping值和帧号广播给所有的玩家
  9. 当物体启动和结束移动时广播
  10. 当渲染帧数下降时,将很明显的看到帧同步对象有很明显的"跳跃"现象,这个现象在星际中更是明显。但在技术成熟的魔兽中已经被插值予以替代
posted @ 2009-05-14 23:09 战魂小筑 阅读(6838) | 评论 (0)编辑 收藏

    我的项目中由于还没有加入转发服务器,因此暂时有3台对外服务器,服务器与服务器之间暂时用内网连接,今天将服务器放到双网卡的服务器,发现竟然将服务器内网地址告诉给客户端来连接,很明显这是错的!

    马上着手解决这个问题:是否可以根据配置,对某几条连接自动从gethostname中获取到内网或者外网地址?事实证明是错误的!这里有一个例子:

    某公司的电话只能对内打,对外打只能靠私人手机。如果 A正在用私人手机跟公司外的B打电话,此时,B想打C的手机,但是B不知道C的号码。但同时,A只知道C的内线号,但不知道其手机。这种情况下,B只有找公司的前台D要到 C的手机号,因为A,C在进入公司时就已经注册过他们的手机号。这样,B就成功的打通了C的手机号。

    这是一种解决方法,也就是说,在现有的服务器管理的上层,再做一层平台服务器,其他服务器到这台服务器获得自己在外网的地址,然后对需要进行外网联系的服务器组和客户端之间传输使用外网地址。

 

    还有一种方法:

        C首先将自己的手机号告诉A,之后B与A联系后,得到C的手机号,而不是其内网号,即可联通

    这种方法的原理就是:将要让客户端转接的某台服务器的地址的公网ip保存在配置文件里,在读取后将这个地址告诉给列表服务器,这样客户端连过来就会获得一个正确的外网地址

posted @ 2009-05-14 22:32 战魂小筑 阅读(396) | 评论 (0)编辑 收藏

    由于书写习惯,现在项目里依然使用我原来习惯的头文件定义协议结构体的方式:

struct EnterLobbyREQ : public ProtocolHeader

{

        char mSessionID[64];

}

这种写法比较传统,有以下优点:

  1. 确实叫协议,带头文件,如果协议有修改,客户端和服务器代码马上能看得出来
  2. 可以在结构体里添加一些自动填充size,type等的构造函数和一些自动计算变长包大小的函数,减少拷贝代码出现的错误
  3. 书写直观,初学者容易理解

但也有以下缺点:

  1. 一个修改可能导致全盘重编
  2. 发送复杂结构的数据不灵活:

    如果只想发送10-20个成员的结构体里的7,8个成员,就需要写很多的赋值表达式,而且这样的代码充斥整个工程

 

    比较流行的写法就是流式写包,在有些工程里叫ProtocolComposer

void Foo (ProtocolComposer& composer)

{

        composer << pos << action ;

}

    其优点显而易见:

  1. 协议可以只是一些注释,客户端和服务器只需要约定俗成就可以,修改协议无需重编
  2. 可以在复杂结构中自由构造发包内容,拷贝复制方便自如
  3. 自由制作变长包及类型决定包内容种类等

 

但其缺点也是有的:

  1. 一端修改协议后,另外一端若不及时修改,在编译期将无法发现,如果最后在运行期暂时没有报错,将形成bug
  2. 组包速度慢于前者,对C++类型的代码支持较好,但是c方式接受较为麻烦

 

总的来说,后者还是为很多项目所用,所以下一个项目将启用后者进行编写,希望能得到更好的游戏逻辑编写体验。如果有更好的建议可以回复。

posted @ 2009-05-06 23:54 战魂小筑 阅读(1416) | 评论 (0)编辑 收藏

    终于拖着8500GT动画片般的将波斯王子4打通。说实在话,这游戏做的确是好,可惜太卡,居然做梦都想买台360感觉下。

    波斯王子4继承刺客信条,依旧是那款命名为"弯刀"的引擎(可以从其打包文件头看出来)。整个游戏从一开始到最后,我多被其骨骼动画混合系统惊叹不已。

游戏中,如果王子先爬上栏杆或者木桩子,公主上来之前,王子自然会让开,甚至会伸出一只手拉她上来。另外,协作动画到处都是,基本上很平滑,不过需要批评的就是在拉机关时,如果女主角距离很远,此刻她会闪现在机关面前

对比前几作,本作取消了时之沙系统,取而代之的是无限制接关和不死身。很多人抱怨,很多人不满,但是在我看来,这是对游戏性的极大扩展。时之沙可以让时间倒退,但是用完后还是会复位,降低了游戏的流畅感。其实波斯王子是啥?就是一个古代跑酷的RPG,相比镜之边缘来说,波斯王子的体验感和厚重程度要好很多

值得夸奖的是本作战斗系统及人物感觉。前几作的人都跟纸片贴墙上飞一样。经过刺客信条的洗礼,波斯王子估计也彻底换了引擎,人物也有厚重感了。战斗系统的防御及反击做的极为舒服,只不过重复的击打4个boss有点回到二代的感觉,这就是欧洲游戏和日本游戏的本质区别:策划和美术都很懒!

本作的对话系统很有意思,在你多次掉下悬崖时,公主会说:"我需要你!你不能死",王子偶尔抱住公主时也会说她长胖了,游戏间,很多感情戏就渐渐的让玩家感受到了,虽然剧情很俗,但是你却能体味其中。最有意思的就是公主8分身时的唯一解法就是跳下悬崖,让公主来救你,太精妙的设定了

下一作大猜想:

    想必加入类似于FC版刺杀希特勒的爪子,增强游戏性?

    希望继续保持现在的战斗系统和不死身

    剧情再离奇一些

    至于场景嘛,最好是来个小时候看过的 从地里倒长的树,那可是正宗的阿拉伯故事哦

波斯王子系列历代都走的是剧情+感动+细节+语言。

时之沙,最终女主角死后,主角利用时之沙之力回到从前,对过去的女主角说曾经有过那么一段情。

武者之心,虽然被达哈卡追的个死去活来,但是能在GF4上看到那么唯美的世界已经很满足了,从红色丝绸的诱惑到最终与时之女王的缠绵,让这个王子不愧为playboy。

王者无双,从二代剧情延续过来,但是时之女王一开始就挂了,之后又回到了初代

而最新作:复生,讲的便是一个mm和一个gg一起周游世界打败黑暗,当然,最后mm挂了,因为生命换来了光明,gg不肯,把黑暗重新带回了世界,不过mm活了,私欲啊,私欲啊,o(>﹏<)o

posted @ 2009-05-05 22:41 战魂小筑 阅读(888) | 评论 (1)编辑 收藏

仅列出标题
共26页: First 18 19 20 21 22 23 24 25 26