[2018年最新整理]JBox2D详解.doc

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[2018年最新整理]JBox2D详解

10.2 2D的王者JBox2D JBox2D是开源的物理引擎Box2D的Java版本,可以直接用于Android。由于JBox2D的图形渲染使用的是Processing库,因此在Android平台上使用JBox2D时,图形渲染工作只能自行开发。该引擎能够根据开发人员设定的参数,如重力、密度、摩擦系数和弹性系数等,自动地进行2D刚体物理运动的全方位模拟。 每种物理引擎都有其独特的概念,在学习开源的物理引擎时,首先需要弄明白的就是其基本概念。因此,本节主要为读者复习一下物理学中的一些基本概念,并介绍JBox2D中的一些常用类与概念。 10.2.1 基本的物理学概念 游戏是对真实世界的仿真,其中用到了许多物理学知识,如密度、质量、质心、摩擦力、扭矩以及碰撞(恢复)系数等。接下来,本小节将简要介绍用JBox2D开发游戏时经常用到的一些物理学概念。 密度 物理学中密度指的是单位体积的质量,符号为ρ,常用单位为kg/m^3。其是物质的一种基本特性,不随物体的质量、体积的改变而改变,同种物质的密度相同。 质量 质量指的是物体中所含物质的量,即物体惯性的大小,国际单位是kg。同一物体的质量通常是一个常量,不因高度、经度或者纬度的改变而变化。但是根据爱因斯坦的相对论,同一物体的质量会随着速度的变化而改变。只有运动接近光速才能感觉到这种变化,因此在游戏中一般不考虑速度对质量的影响。 质心 物体(或物体系)的质量中心,是研究物体(或物体系)机械运动的一个重要参考点。当作用力(或合力)通过该点时,物体只作移动而不发生转动;否则在发生移动的同时物体将绕该点转动。 研究质心的运动时,可将物体的质量看作集中于质心。理论上,质心是对物体的质量分布用加权平均法求出的平均中心。 摩擦力 当两个互相接触的物体,如果要发生或者已经发生相对运动。就会在接触面上产生一种阻碍该相对运动的力,这种力就称之为摩擦力。其基本情况如图10-9所示。 图10-9 摩擦力示意图 提示 根据物体是否发生相对运动可以分为静摩擦力与滑动摩擦力,实际开发中可以进行简化,但若要模拟更加真实的效果就需要分别开发。 扭矩 扭矩在物理学中就是力矩的大小,等于力与力臂的乘积,国际单位是Nm(牛米)。在力臂不变的情况下,力越大,扭矩越大。基本情况如图10-10所示。 恢复系数 两物体碰撞后的总动能与碰撞前的总动能之间的比称之为恢复系数,其取值范围为0~1。如果恢复系数为 1,则碰撞为完全弹性碰撞,满足机械能守恒;如果恢复系数小于1并且大于0,则为非完全弹性碰撞,不满足机械能守恒,这种情况是最常见的;如果恢复系数为0,则为完全非弹性碰撞,两个物体会粘在一起。基本情况如图10-11所示。 图10-10 扭矩示意图 图10-11 各种碰撞情况 说明 在图10-11中,两个小球的质量相等,小球的初速度V1大于V2。 10.2.2 JBox2D中常用类的介绍(1) 俗话说得好基础不牢,地动山摇。在学习新技术时,首先要学习的就是该技术的一些基本概念,因此本小节主要介绍JBox2D中一些必知必会的类。 1.Vec2类(二维向量) 该类属于mon包,继承自java.lang.Object类,其对象用于表示一个二维向量或二维笛卡尔坐标。二维向量Vec2类的基本功能如图10-12所示。 图10-12 二维向量示意图 该类在JBox2D中的使用频率非常高,通常用于表示物体的位置、速度等,其构造器与常用方法及属性如表10-2所列。 表10-2 构造器与主要方法 方法、属性或构造器签名 说 明 类 型 public Vec2(float x,float y) 创建一个Vec2的对象,该对象表示 X轴分量为x,Y轴分量为y的一个 向量或坐标系中的(x,y)点 构造器 public static Vec2 abs(Vec2 a) 求向量的绝对值 方法 public Vec2 add(Vec2 v) 返回该向量与另一向量的和, 并不改变其中的任何一个的值 方法 public Vec2 addLocal(Vec2 v) 返回该向量与另一向量的和, 并改变当前的向量 方法 public Vec2 clone() 复制向量 方法 public float length() 返回该向量的长度 方法 public float lengthSquared() 返回该向量长度的平方 方法 public static Vec2 max(Vec2 a,Vec2 b) 返回两个向量中最大的 方法 public static Vec2 min(Vec2 a,Vec2 b) 返回两个向量中最小的 方法 public void set(float x,float y) 设置向量的两个分量 方法

您可能关注的文档

文档评论(0)

liwenhua00 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档