转载标明出处:http://write.blog.csdn.net/postedit/38589377
上篇回顾
本篇名言:了解面对逆境,远比如何接受顺境重要得多。[马丁·赛力格曼]
上篇中,我们学习了Box2d物理引擎的基本知识,介绍了如何配置VS 2012,解释了一些物理引擎的基本概念,并创建了一个基本的Box2d程序。接下去蛤蟆会根据官方文档来逐步解析Box2d物理引擎的使用。
理论介绍
如上一笔记介绍的,Box2d物理引擎主要包含3大模块。
分别是common模块,collision模块和Dynamics模块。
Common模块主要的作用是设置,内存管理和向量数学。
Common中设置的头文件是b2Settings.h
( 路径如下: \cocos2d\external\Box2D\Common)
定义了int32,float32,常量等用于方便的计算数据结构的大小。
定义了分配包装函数,如b2Alloc和b2Free 函数用于大的分配。
Common中的内存管理,是非常重要的,因为Box2D需要快速和高效的使用内存。
Box2d物理引提供了一个SOA(small objectallocator),叫做b2BlockAllocator。这个工作的原理是这样的。SOA保持了一定数量的可变大小的池。如果有内存请求,SOA就返回一个内存块来满足这个请求。如果这个块释放,就返回到池中。这样就非常的快速和高效。(呵呵,这么简单的描述,蛤蟆也没有看出来。这个其实主要考虑到如果我们自己手动不停的malloc或者new 给一些小对象就很容易产生内存碎片的了。)
这个对于coder有什么好处呢?就是我们不需要new或者malloc一个body,fixture或者joint了。我们只需要分配一个b2world即可。
此外我们知道一下,出来刚才描述的b2BlockAllocator(用于块分配管理)之外,其实还有一个b2StackAllocator用于避免每次时间步长的时候堆栈分配的。
Common中包含了简单的小向量和矩阵模块。用来满足Box2d内存的需要。这些数据库保持的比较简单,这样易于移植和维护。
总结
本次是蛤蟆对开源的Box2d物理引擎中的其中一个模块-common的学习和记录。接下去,蛤蟆会继续学习collision和Dynamics。