Box2D v2.3.0 用户指南(第三章)

翻译 2017年01月03日 21:45:46


第三章 公共模块(Common)

3.1简介

公共模块包含设置(settings),内存管理(memorymanagement),矢量计算(vector math)。

 

3.2设置

头文件b2Settings.h包含:

·  诸如int32,float32这类数据类型

·  常量(constants)

·  分配的封装(allocation wrapper)

·  版本号

 

类型(types)

Box2D定义了多种数据类型,例如float32,int8等等,以方便我们定义不同大小的结构。

 

常量

Box2D定义了很多常量,这些常量在b2Settings.h中做了说明。通常我们不需要去修改这些常量。

 

分配的封装

设置(settings)的文件定义b2Alloc和b2Free,用于大块内存分配,你可以将这些调用转移到你自己的内存管理系统中。

 

版本

b2Version结构保存当前的版本信息,你可以在运行时调取。

 

3.3内存管理

Box2D的设计理念中,很多设计决策都是为了快速高效的使用内存。这一节我们会讨论Box2D怎样和为什么要分配内存。

Box2D倾向于分配大量的小物体(范围大约在50-300字节)。使用malloc和new方法在堆(heap)空间上分配内存对于小物体来说效率很低,并且容易产生内存碎片(fragmentation)。这些小物体的生命周期大多很短,例如接触(contact),可能仅仅持续几个时间片段。因此我们需要一个分配器(allocator),能够高效的为这些物体分配堆空间。

Box2D的解决方法是使用一个叫做b2BlockAllocator的小物体分配器(smallobject allocator,SOA),SOA负责维护一定数量的大小可变的可增长的内存池(pool),当遇到内存请求时,SOA返回一块儿大小最合适的内存块,当一个内存块被释放的时候,它实际上被内存池回收了。这些操作保证了快速响应内存的分配和释放,不会产生大量的堆请求。

由于使用了SOA,在Box2D中你不必再去new或者malloc一个物体、装置或者关节对象了,有一个例外,你需要自己动手分配一个b2World对象,b2World类中提供了工厂方法用于创建物体,装置和关节,以便Box2D通过SOA将枯燥的处理细节包装起来。因此,我们永远也不要对物体,装置或者关节手动调用delete或者free来释他们。

在执行一个时间间隔(timestep)时,Box2D需要一些临时内存空间,这部分空间它通过一个栈分配器(b2StackAllocator)来避免单步(per-step)堆空间分配,你不需要跟栈分配器打交道,但是知道它的存在还是有必要的。

 

3.4数学(math)

Box2D包含了一个小的向量和矩阵模块,为了满足Box2D以及API内部调用的需求。所有的成员都提供了调用接口,所以你也能够在你的工程中调用他们。

数学库代码非常简洁以便于移植和维护。




Box2D v2.3.0 用户指南(第八章)

Box2D v2.3.0 用户指南

Box2D v2.3.0 用户指南(第九章)

Box2D v2.3.0 用户指南

Box2D v2.3.0 用户指南(第七章)

Box2D v2.3.0 用户指南

Box2D v2.3.0 用户指南(第十章)

Box2D v2.3.0 用户指南

Box2D v2.3.0 用户指南(第十一章)

Box2D v2.3.0 用户指南

Box2D v2.3.0 用户指南(第二章)

Box2D v2.3.0 用户指南

Box2D v2.1.0用户手册翻译 - 第11章 杂项(Loose Ends)

第11章 杂项(Loose Ends) 11.1 隐式摧毁 Box2D没有使用引用计数。你摧毁了body后,它就确实不存在了。访问指向已摧毁body的指针,会导致未定义...

Box2D v2.1.0用户手册(3)——公共模块(Common)

第03章 公共模块(Common) 3.1 关于 公共模块包含了配置(Settings),内存管理(memory management)和矢量数学(vector m...

Box2D v2.1.0用户手册翻译 - 目录,第01章 导言(Introduction)

转载于 Complex_OK的翻译:     网上已经有个Box2D用户手册的翻译,但是基于v2.0.1,跟最新手册有很多不对应。 在这里决定将文档的全文再翻译出来,更准确的说是根据网上流传的v2...
  • xu_cq
  • xu_cq
  • 2013年02月26日 20:27
  • 602

Box2D v2.1.0用户手册翻译 - 第08章 关节(Joints)

第08章 关节(Joints) 8.1 关于 关节用于把物体约束到世界,或约束到其它物体上。在游戏中, 典型例子有木偶, 跷跷板和滑轮。用不同的方式将关节结合起来使用,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Box2D v2.3.0 用户指南(第三章)
举报原因:
原因补充:

(最多只允许输入30个字)