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

103 篇文章 0 订阅
53 篇文章 0 订阅


第三章 公共模块(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内部调用的需求。所有的成员都提供了调用接口,所以你也能够在你的工程中调用他们。

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



Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值