Cocos2d-x学习笔记(十五)-------->物理引擎,cocos2d-x学习笔记

  次阅读 作者:智能小宝 来源:互联网 2015-09-28 14:43 我要评论(0)

Cocos2d-x学习笔记(十五)-------->物理引擎,cocos2d-x学习笔记

物理引擎Cocos2d-x引擎内置了两种物理引擎,它们分别是Box2D和Chipmunk,都是非常优秀的2D物理引擎,而且x引擎将它们都内置在SDK中。Box2D使用较为广泛,在这里选择Box2D来进行学习。

物理引擎模拟的内容:

重力:在游戏中模拟重力加速度,当游戏中人物跳跃起来后会受到重力影响而向下移动,在没有地面的场景,人物和物体会由于重力而做自由落体运动。

牵引力(动力):在游戏中比如汽车的引擎,人物本身能够提供向前进行的动力,这种牵引力是持续不断地作用在物体上的,物体因此可以向作用力的方向移动。

摩擦力:物体在地面等接触面上移动时,会受到摩擦力的影响,它可以使正在运动的物体由于摩擦力的作用而停下来。

冲击力:比如爆炸会产生一次性的冲击力,会对爆炸范围内的物体产生一瞬间的力的作用,使其运动起来。

碰撞检测:当一个物体与另一个物体碰撞后,两个物体会因为碰撞发生作用力与反作用力,会让其之前的运动受到影响。

还有浮力、关节链接等等物理概念。

Box2D简介:

Box2D是由C++开发的一款轻量级的二维刚体仿真库,主要用于编写2D游戏,开发者可以使用它让游戏中的物体运动起来更真实。让游戏世界更具交互性。Box2D物理引擎是一个程序性动画系统。做动画常有两种方法:一种是预先准备好动画所需的图像数据,比如某种格式的2D图片,再一帧一帧地播放。这种预先准备的可称为数据性动画。另一种是以一定方法,动态计算出动画所需的数据,比如移动后的新位置、旋转的角度等等,根据这些数据再进行绘图。这种动态计算的可称为程序性动画。Box2D就是用物理学的方法,推导出游戏世界物体的位置、角度等数据。而Box2D也仅仅是推导出数据,至于得到数据之后怎么处理就是开发者自己的事情了。

Box2D的一些基本对象:

物理世界world:一个物理世界就是各种刚体bodies、夹具fixtures、约束constraints等物理引擎中基本对象相互作用的集合。所有的物理对象都是在物理世界已经建立好的基础上,在物理世界中生成的。物理世界具有一个范围,在2D坐标系中,物理世界的范围就是一个矩形区域,区域内的物理对象可以相互作用,发生物理碰撞等影响,一旦物理对象到了区域之外,将不再进行物理运算,不再产生任何物理作用。Box2D支持创建多个世界,但这通常没有必要。物理世界是Box2D引擎最为重要的对象,游戏必须要持有物理世界对象,这样才能访问物理世界中的各种对象,知道它们的状态,然后将这些状态更新到游戏界面中反映出各种模拟的物理现象。

刚体rigid body:大多数游戏对象在物理世界中都被抽象成为刚体对象,它是物理世界中十分坚硬的物质,物理引擎假定刚体都是不会发生形变的,它上面任意两点之间的距离都保持不变。在Box2D物理引擎中,b2Body类就是代表刚体的类型。在设计实现物理游戏时,刚体通常都对应着游戏中的一个具有具体外形的角色。刚体在Box2D中主要分为两大类,一类是可以移动位置或者旋转的动态刚体,这种刚体通常用于表示游戏中的活动物体;另一类是位置无法移动和旋转的静态刚体,这种刚体通常用于表示游戏中的地面平台等静物。

夹具fixture:每个刚体都需要定义一个或者多个夹具,夹具是一个属性容器,它具有形状属性shape、密度属性density、摩擦属性friction和恢复属性restitution。当一个刚体具有了夹具之后,它就可以参与物理世界的碰撞检测,摩擦力运算和弹力运算了。

形状shape:2D几何外形对象,比如圆形circlr或者多边形polygon。形状定义好之后会被附加到某个夹具之上,作为夹具的外形属性存在,它是夹具的重要组成部分,家具在刚体碰撞运算时会通过形状来进行检测。形状类中保存的主要是形状的几何数据信息,比如一个圆形circle主要是保存它的半径信息,只要知道了半径就能知道圆形的具体大小;另一个比较常用的形状是四边形rect,它主要记录的是四边形的宽度和高度信息。

关节joint:关节就是种约束,用于将两个或多个刚体固定到一起。Box2D支持不同的关节类型——转动revolute、棱柱prismatic、距离distance等。比如卡通人物的手臂运动,就可以定义一个和人类一样的肘关节,关节两端是上臂和前臂两个刚体。一些关节可以有限制limits和马达motors。

关节限制joint limit:关节限制限定了一个关节点运动范围。例如人类的胳膊肘只能在某一角度范围内运动。

关节马达joint motor:根据关节的自由度,关节马达可以驱动关节所连接的物体。例如你可以使用一个马达来驱动一个肘的旋转。

在游戏中引入Box2D物理世界:

因为x引擎内置了Box2D物理引擎,所以需要物理引擎的地方只要引入“Box2D/Box2D.h”头文件即可,以下代码就是建立物理世界,也就是初始化Box2D物理引擎的过程,这个过程都是放在游戏场景初始化阶段,把物理世界对象作为游戏世界的一部分完成初始化过程。

//定义重力加速度

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...