好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

Box2Dv2.1.0用户手册中文翻译增加libgdx中box2d使用批注.doc

60页
  • 卖家[上传人]:宝路
  • 文档编号:19486500
  • 上传时间:2017-11-19
  • 文档格式:DOC
  • 文档大小:340.59KB
  • / 60 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 原文地址: 网上已经有个 Box2D 用户手册的翻译,但是基于 v2.0.1,跟最新手册有很多不对应在这里决定将文档的全文再翻译出来,更准确的说是根据网上流传的 v2.0.1版本,将最新文档重新整理一遍很多内容是直接复制自Box2D v2.0.1 用户手册原文:Box2D v2.0.2 User Manual译者:Aman JIANG(江超宇)Box2D v2.1.0 用户手册版权 © 2007-2010 Erin Catto第01章 导言(Introduction)1.1 关于Box2D 是个二维刚体仿真库, 用于编写游戏程序员可以使用它, 让游戏中的物体运动起来更真实, 让游戏世界更具交互性以游戏的角度来看,物理引擎只是个程序性动画系统procedural animation)(译注: 做动画常有两种方法, 一种是预先准备好动画所需的数据,比如图片,再一帧一帧地播放另一种是以一定方法,动态计算出动画所需的数据,根据数据再进行绘图 从这种角度看,预先准备的,可称为数据性动画,动态计算的可称为程序性动画这个区别,就类似以前我们做历史题和数学题,做历史题,记忆很重要,也就是答案需要预先准备好的。

      做数学题,方法就很重要,答案是需要用方法推导出来的 Box2D 就是用物理学的方法,推导出那游戏世界物体的位置,角度等数据而 Box2D 也仅仅推导出数据,至于得到数据之后怎么处理就是程序员自己的事情了)Box2D 用可移植的 C++来写成,它定义的大部分类型都有 b2前缀, 希望这能有效消除Box2D 和你自己的游戏引擎之间的名字冲突1.2 先备条件(Prerequisites)在此手册中,我假定你已经熟悉了基本的物理概念 ,比如质量 (mass),力(force), 扭矩(torque)和冲量(impulses) 如果没有 , 建议读一下 Chris Hecker 和 David Baraff (google 这些名字) 的教程, 你不需要理解得非常细致 , 只需很好地了解一些基本概念 , 帮助你使用 Box2DWikipedia 也是个很好的地方,去获取物理和数学知识Wikipedia 的内容经过了精心的整理,在某些方面可能比 google 更有用在 Game Developer Conference 上, Box2D 是作为物理教程的一部分而创建的你可以从box2d.org 的下载区得到这些教程。

      Box2D 是使用 C++写成的, 因此也假定你具备 C++编程经验Box2D 不应该是你的第一个 C++程序项目你应该能熟练地编译 ,链接和调试注意Box2D 不应该是你的第一个 C++项目在使用 Box2D 之前, 请先学习 C++程序设计, 还要学习怎么去编译, 连接和调试网上有很多这方面的资料1.3 关于本手册本手册涵盖了大多数 Box2D 的 API,但并非每个方面都涉及到Box2D 自带了 testbed 例子, 鼓励你去看看, 以便了解更多另外, Box2D 的代码注释已被整理过 , 符合 Doxygen程序的格式要求, 所以很容易就可以创建一个有超链接的 API 文档1.4 反馈及错误报告如果你想反馈 Box2D 的任何内容,请在论坛里留下意见这也是个交流讨论的好去处Box2D 使用了 Google code project 进行问题跟踪这是个跟踪问题的好方法, 保证你的反馈不会被淹没在论坛深处而无人理会反馈地址: 就越有可能得到修复假如有个测试例子将问题重现, 就更好了1.5 核心概念(Core Concepts)Box2D 中有一些基本对象, 这里我们先做一个简要的定义, 随后的文档会有更详细的描述。

      形状(shape)2D 几何对象, 比如圆形(circle)或多边形(polygon)刚体(rigid body)十分坚硬的物质, 坚硬得像钻石,它上面任意两点之间的距离都保持不变在后面的讨论中,我们用物体(body)来代替刚体夹具(fixture)fixture 将形状绑定到物体之上, 并有一定的材质属性, 比如密度(density), 摩擦(friction)和恢复(restitution)译注:一个物体和另一物体碰撞, 碰撞后速度和碰撞前速度的比值会保持不变,这比值就叫恢复系数)约束(constraint)约束是个物理连接, 用于消除物体的自由度在 2D 中, 物体有 3个自由度( 水平,垂直,旋转)如果我们把一个物体钉在墙上( 像钟摆那样), 那就把它约束到了墙上这个时候 ,此物体就只能绕着钉子旋转, 所以这个约束消除了它 2个自由度译注:简单的说, 需要用几个参数来确定物体的空间状态, 这个物体就有几个自由度在二维中,完全没有约束的条件下, 我们要确定物体的状态, 要有 x 坐标, y 坐标, 旋转角这三个参数, 所以自由度为3如果物体被钉在墙上, 只要有旋转角,就可以完全确定物体的状态,有了钉子这个约束,物体自由度就变成了1。

      )接触约束(contact constraint)一种特殊的约束, 设计的目的是为了防止刚体被穿透 , 也用于模拟摩擦和恢复接触约束不用你来创建, 它们会自动被 Box2D 生成关节(joint)关节就是种约束, 用于将两个或多个 body 固定到一起Box2D 支持不同的关节类型: 转动(revolute),棱柱(prismatic),距离(distance)等一些关节可以有限制 (limits)和马达(motors)关节限制(joint limit)关节限制限定了一个关节的运动范围例如人类的胳膊肘只能在某一角度范围内运动关节马达(joint motor)根据关节的自由度, 关节马达可以驱动关节所连接的物体例如,   你可以使用一个马达来驱动一个肘的旋转世界(world)一个物理世界就是各种, 刚体 (bodies), 夹具(fixtures), 约束(constraints)相互作用的集合 Box2D 支持创建多个世界, 但这通常没有必要libgdx 核心概念应用到游戏之初步理解:1、 利用 world 模拟创建游戏的物理世界;2、 利用 body 创建各种通用物体;3、 利用 fixtures 给予通用物体基本属性(密度、摩擦力)以仿真各种真实物体;4、 利用 joint 将两个或多个物体(body )关联到一起,创建组合一起运动的物体,如旋转机器人,类似使用组合多个图片实现动画效果的物体。

      5、 当游戏中各种物体状态发生改变,导致出现碰撞时,contact 及 contact constraint 就出现了,contact 用来表示两个物体之间出现了碰撞,contact constraint 用于限制碰撞的影响范围6、 通常游戏需要对物体的碰撞进行处理,以实现游戏效果,此时需要利用 Contact Listener 相应的接口消除部分物体的碰撞、记录发生碰撞的物体状态以立即实现游戏效果1.6 模块(Modules)Box2D 由三个模块组成:公共(Common)、碰撞(Collision)、和动态(Dynamics) Common模块包括了内存分配、数学计算和配置Collision 模块定义了形状 (shapes)、broad-phase检测和碰撞功能/查询(collision functions/queries)最后,Dynamics 模块提供对世界(world)、刚体(bodies)、夹具(fixtures)和关节(joint) 的模拟译注: Broad Phase 是碰撞检测的一个子阶段, 将空间分割, 每个空间对应一个子树, 物体就放到树中, 不同子树内的物体不可能相交不用去计算 , 在同一个子树由对应的算法再计算出接触点等信息。

      因为这是远距碰撞检测,就叫 Broad Phase, 接下来还有 Narrow Phase)1.7 单位Box2D 使用浮点数, 所以必须使用一些公差来保证它正常工作这些公差已经被调谐得适合米-千克- 秒(MKS)单位尤其是, Box2D 被调谐得能良好地处理0.1到10米之间的移动物体这意味着从罐头盒到公共汽车大小的对象都能良好地工作静态的物体就算到50米都没有大问题作为一个2D 物理引擎,如果能使用像素作为单位是很诱人的很不幸,那将导致不良模拟,也可能会造成古怪的行为一个200像素长的物体在 Box2D 看来就有45 层建筑那么大想象下使用一个已调谐好用于模拟玩偶和木桶的引擎去模拟高楼大厦的运动那并不有趣注意Box2D 已被调谐至 MKS 单位移动物体的尺寸应该保持在大约 0.1 到 10 米之间当你渲染场景和角色时, 可能要用到一些比例缩放系统 Box2D 自带的 testbed 例子使用了OpenGL 的视口变换最好把 Box2D 中的物体看作移动的广告板, 其上带着你的艺术创作广告板在一个以米为单位的系统里运动,但你可以利用简单的比例因子把它转换为像素坐标之后就可以使用这些像素坐标去确定你的精灵(sprites)的位置,等等。

      Box2D 里的角使用弧度制物体的旋转角度以弧度方式存储,并可以无限增大如角度变得太大,可考虑将角度进行规范化使用 b2Body:SetAngle)1.8 工厂和定义内存管理在 Box2D API 的设计中担当了一个中心角色所以当你创建一个 b2Body 或一个 b2Joint 时, 你需要调用 b2World 的工厂函数(factory functions)你不应以别的方式为这些类型分配内存这些是创建函数:b2Body* b2World::CreateBody(constb2BodyDef* def)b2Joint* b2World::CreateJoint(constb2JointDef* def)在 libgdx 中对应于 World 类中相应方法:public Body createBody (BodyDef def)public Joint createJoint (JointDef def)这些是对应的摧毁函数:void b2World::DestroyBody(b2Body*body)void b2World::DestroyJoint(b2Joint*joint)在 libgdx 中对应于 World 类中相应方法:public void destroyBody (Body body)public void destroyJoint (Joint joint)当你创建物体或关节时, 需要提供定义 (definition)。

      这些定义包含了创建物体或关节时需要的所有信息使用这样的方法,我们能够预防构造错误, 使函数参数的数量较少 ,提供有意义的默认值,并减少访问子(accessor)的个数fixture 必须有父 body, 要使用 b2Body 的工厂方法来创建及摧毁b2Fixture* b2Body::CreateFixture(constb2FixtureDef* def)voidb2Body::DestroyFixture(b2Fixture* fixture)也有个简便方法直接用形状和密度来创建 fixtureb2Fixture* b2Body::CreateFixture(constb2Shape* shape, float32 density)在 libgdx 中对应于 Body 类中相应方法:public Fixture createFixture (FixtureDef def)public void destroyJoint。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.