发现一本好书,《游戏编程精粹3》。一直以来都认为程序设计中最为复杂的实际上都能在游戏中得到体现,在游戏设计中的很多思想都能被我们实际工程中所使用。每一个工程产品,都可以看做是一个特殊的游戏,使用这个产品的时候,也跟玩游戏一样。特将以下有感想的部分摘录至此。以后阅读这方面的书籍的时候,也可以作为参考。
问题1:我们应该关注于系统底层,比如一些精巧设计的函数,还是要聚焦于高层问题,如引擎设计或者工具开发?考虑问题的层次和角度问题?
万丈高楼平地起,两者是可以统一的。真正宝贵的东西是处理问题中所表现出来的独到的洞察力。
1. 调度游戏中的事件:
系统设计的时候,需要有真实时钟和虚拟时钟。
在进行测试的时候,可以将虚拟时钟加快,进而加速测试过程。
调度器的优点:
l 系统调度器可以对系统性能进行统计,每一个事件执行了多少时间是可以统计出来的;
l 可以对任务时间进行预算,只有当预算时间超过真实事件,该任务才被调度。
2. 基于对象组合的游戏架构
架构设计,不依赖于操作系统和实现技术,可以设计一套独立于平台的系统接口。基于对象组合的架构设计可以将程序结构扁平化,对象之间的关系动态化,某些对象的改变对其它对象的影响很小。而层次化系统缺陷是对象之间的关系是不变的,任务是垂直组织起来的,而系统高层的改变会对系统底层部分带来很大影响。
产品开发的各个阶段:
l 概念阶段,功能设计,任务创建;
l 原型设计:功能演示;
l 完整设计:从头到尾的所有功能实现;
l 生产阶段:完成所有功能的设计和实现;
l 产品封装与集成:
l 测试阶段:解决兼容性问题;
l 发布阶段:在第一个平台上进行发布;
l 移植阶段:不同语言,不同平台的各个版本,对不同平台的特性进行增强。
3. 让C的宏重现光辉
a) #define Conn(x,y) x##y
#define ToChar(x) #@x
#define ToString(x) #x
b) #define CaseEnum(x) case(x): { printf(ToString(x); printf("/n");}
c) #define _QUOTE(x) # x
d) #define QUOTE(x) _QUOTE(x)
e) #define __FILELINE__ __FILE__ "(" QUOTE(__LINE__) ")"
f) #define _UNIQUE_VAR(x) safety_limit ## x
g) #define UNIQUE_VAR(x) _UNIQUE_VAR(x)
4. 为世界市场开发游戏
a) 多语言的字体,大小可以随意切换和显示;
b) 界面上,要为别的语言预留一定的长度和空间;
5. 3D游戏中的实时输入和用户界面
a) 鼠标需要每帧更新一次;
b) 按键和键盘可以进行输入缓冲处理;
6. 轻量级的、基于规则的日志记录
a) 用宏来实现
7. 日志服务
a) 日志应该可以输出至控制台,文件或者网络等
8. 实时的层次化的性能评测
a) 一个程序有90%的时间花在了10%的代码上;
b)
9. 随机数生成
a) 用位掩码的方法来生成随机数
10. 基于函数指针的内嵌式有限状态机
11. 将实时策略游戏中的延迟最小化