浅谈游戏UI架构

界面(User Interface)层在游戏中的定位就是数据与用户之间的中间层,它承载着两个基本任务,一是把游戏中的各种数据展示给用户,二是把用户的操作转化成指令调用逻辑层的功能。通常的游戏引擎都会自带UI功能,并且集成易用的编辑器,甚至有专门的UI中间键,例如ScaleForm,可以提供非常强大的UI服务。我们更多的关注是界面的设计,也就是我们常说的交互是否舒适,界面是否美观。但这篇文章要讲的并不是这方面的问题,而是讨论在程序的角度,基于Win32消息机制如何实现一个UI界面层。

首先我们通过一个简单的面板看看单独一个界面的结构:

ui01

Continue reading

pdb文件 小结

.pdb文件,是VS生成的用于调试的符号文件(program database),保存着调试的信息。在VS的工程属性,C/C++,调试信息格式,设置/Zi,那么VS就会在构建项目时创建PDB文件。

在这里要区分两种情况:

1、构建静态库时,可以在工程属性 –> C/C++ –> 输出文件 –> 程序数据库名 设置生成的pdb文件名称,如果不指定,默认是生成为VCx0.pdb,这里x是VS版本号,例如用VS2005,就会生成VC80.pdb。这里就会产生一个疑问,编译静态库时默认生成的.pdb文件名字都一样,那引用这个静态库的项目最后能找到正确的.pdb文件吗?答案是肯定的,因为VS会在生成的文件中嵌入 .pdb 文件的路径。

举个例子,在Project/ToolA下,构建了一个静态库ToolA.lib,对应生成一个vc80.pdb,同样在在Project/ToolB下,构建了一个静态库ToolB.lib,对应生成一个vc80.pdb。然后最终的工程Work.exe同时链接了这两个静态库.这时,生成Work.pdb的时候,就会在ToolA.lib中找到它对应的符号文件路径Project/ToolA/vc80.pdb,以及ToolB.lib对应的符号文件路径Project/ToolB/vc80.pdb,合并生成最终工程的Work.pdb。

Continue reading

for while 循环 区别 汇编 | for循环与while循环在DEBUG环境下生成的汇编码的区别

for while 循环 区别 汇编

是否有听人讲过for while 循环会差一条汇编语句呢?

是否有人跟你说过while会比for快呢?

for 跟 while 生成的汇编码是否一样呢?

答案是,对,也不对。因为在DEBUG环境下,VS编译器为for 跟 while 循环生成的汇编代码确实有区别,for的确是多了一条跳转语句,但是,这仅仅是DEBUG环境下,在RELEASE版本里面,编译器会做各种优化,而且不同厂商的编译器还有不同的优化策略,所以,除非某人确切告诉你,他是从RELEASE版本下的EXE中逆向工程得到的汇编码里明确看到区别,不然别相信他。而且我猜测,RELEASE版本里不会有区别的(仅仅是我猜测,求大侠拍砖)。

好,那我们来看看DEBUG环境下差别在哪里,为什么会有这差别: Continue reading

C++ 虚函数 虚表 virtual table | 浅谈虚函数与虚表(virtual table)

C++ 虚函数 虚表 virtual table

 

以前在百度空间写的两篇文章

 

浅谈虚函数与虚表(virtual table):

http://hi.baidu.com/00bin0/blog/item/55847fe8cfaaa63f2cf534c7.html

 

浅谈虚函数与虚表(virtual table)(二):

http://hi.baidu.com/00bin0/blog/item/14c1998dc8a5c705c9fc7ac0.html

 

请大侠斧正…