关于Cocos2d-x物理引擎用到的类和使用
其实就是这三类PhysicsWorld类,PhysicsBody类,PhysicsShape类。
1.PhysicsWorld类
PhysicsWorld对象代表Cocos2d-x中的物理世界,这个世界能够用来模拟碰撞和其他物理性质。不要直接创建PhysicsWorld对象,建议从一个场景对象中获取PhysicsWorld对象,scene->getPhysicsWorld()。
2.PhysicsBody类
PhysicsBody对象代表物理世界中的刚体,一个刚体可以被附加一个或多个形状。如果通过createXXX()函数创建刚体对象,将会根据密度自动计算质量和力矩。
3.PhysicsShape类
PhysicsShape对象代表一个刚体的形状和一些其他的属性,可以设置刚体的一些密度,质量,弹性等等。
给一个精灵对象设置刚体的步骤:
1.创建一个精灵对象ball
2.创建一个刚体body
3.用PhysicsShape指针对象调整这个刚体的属性
PhysicsShape *ps=body->getShape(0);
ps->setMass(0.2f);
...
4.设置这个精灵对象的刚体属性
ball->setPhysicsBody(body);
5.把这个精灵对象添加到层
this->addchild(ball);
在某个对象类的init函数中写
getPhysicsBody()->setDynamic(false);
表示创建出来的实例对象是静态的刚体,不受重力的影响。相反,如果不写这一句,那创建出来的刚体就受重力的影响,是动态刚体。
同时表示创建出来的实例对象是不会被其他的物体挡住不动的,会一直朝着自己的轨迹运动。如果想要两个刚体之间发生碰撞事件,就是触发碰撞监听器的函数,有碰撞检测,则两者之间必须至少有一个是动态刚体。
在某个对象类的init函数中写
getPhysicsBody()->setRotationEnable(false);
表示创建出来的实例对象是不会被其他的物体碰撞而发生一点点旋转。
在某个对象类的init函数中写
getPhysicsBody()->setContactTestBitmask(1); //例1
myCreep->getPhysicsBody()->setContactTestBitmask(GameScene::ContactMaskBit::HERO_CONTACTMASKBIT); //例2
表示创建出来的实例对象是参与碰撞检测的,如果在HelloWorld的init函数中加一个刚体的碰撞事件监听器,当设置了这个属性的实例对象彼此之间发生碰撞的时候就会调用这个事件监听器中的函数,不写这个的话是不参与碰撞检测的。
在某个对象类的init函数中写
getPhysicsBody()->getShape(0)->setFriction(0);
表示创建出来的实例对象的刚体表面的摩擦力为0
在某个对象类的init函数中写
getPhysicsBody()->getShape(0)->setRestitution(0);
表示创建出来的实例对象的刚体的弹性为0
在某个对象类的init函数中写
getPhysicsBody()->setCollisionBitmask(0x0);
默认情况下参数里面是非0的,那样子的话“与”起来就不会为0。
表示不进行碰撞模拟,就是不产生碰撞的效果,直接穿透而过,我的理解是这样的,但是只设置这个的话还是会碰撞检测。这个不会影响子节点的碰撞效果和检测。
在某个对象类的init函数中写
getPhysicsBody()->setGravityEnable(false);
表示这个刚体不受重力,这句话经常和setDynamic(true)搭配,这样子既可以产生碰撞事件,进行碰撞检测,又可以自定义一些刚体的普通动作。
在某个对象类的init函数中写
setPhysicsBody(PhysicsBody::createBox(this->getContentSize()));
表示用这个实例化对象的ContentSize为大小,创建一个刚体,如果已经有刚体的时候,用这个方法是无效的,刚体的大小为第一次使用这个方法创建的时候的大小,就算想this->getPhysicsBody()->setPhysicsBody(PhysicsBody::createBox(this->getContentSize()));也不行,getPhysicsBody()后也并没有setPhysicsBody()方法。
在某个对象类的init函数中写
getPhysicsBody()->setEnabled(false);
表示用这个实例化对象的刚体变得不可见,无效果,相应绑定的精灵也不会发生碰撞,红色调试框没了。当变成true的时候,又可以看见红色调试框,又可以参加碰撞,又有效果。
在某个对象类的init函数中写
getPhysicsBody()->removeFromWorld();
表示把这个实例化对象的刚体彻底从物理世界中删除,且不能再用setPhysicsBody()创建刚体,写setPhysicsBody()也是无效。一般是不用这个相应刚体所绑定节点后才使用这个方法。
在GameScene.cpp的中写
((Scene*)this->getParent())->getPhysicsWorld()->setAutoStep(true);
获取物理世界并且进行一些操作,进行一些物理世界属性的设置。
第十三章的书上代码的物理世界测试那一部分中,我感觉很可能作者是想在手机上用重力感应来控制物体或者说实现重力,所以就写了设备加速度计方法和加速度计监听器。
关于Cocos2d-x物理引擎用到的类和使用的更多相关文章
- cocos2dx-3.x物理引擎Box2D介绍
理引擎 Cocos2d-x引擎内置了两种物理引擎,它们分别是Box2D和Chipmunk,都是非常优秀的2D物理引擎,而且x引擎将它们都内置在SDK中.Box2D使用较为广泛,在这里选择Box2D来进 ...
- [原创]cocos2d-x研习录-第三阶 特性之物理引擎
游戏物理引擎是指在游戏中涉及物理现象的逻辑处理,它用于模拟现实世界的各种物理规律(如赛车碰撞.子弹飞行.物体掉落等),让玩家能够在游戏中有真实的体验. Cocos2D-x中支持Box2D和Chipmu ...
- [Cocos2D-x For WP8]Box2D物理引擎
物理引擎通过为刚性物体赋予真实的物理属性的方式来计算运动.旋转和碰撞反映.为每个游戏使用物理引擎并不是完全必要的—简单的“牛顿”物理(比如加速和减速)也可以在一定程度上通过编程或编写脚本来实现.然而, ...
- Cocos2d-x3.2 使用物理引擎进行碰撞检测[转]
通常在游戏简单逻辑判断和模拟真实的物理世界时,我们只需要在定时器中判断游戏中各个精灵的条件是否满足判断条件就可以了.例如,在飞机大战中,判断我方子弹和敌机是否发生碰撞一般在定时器中通过敌机所在位置的矩 ...
- 实例介绍Cocos2d-x中Box2D物理引擎:碰撞检测
在Box2D中碰撞事件通过实现b2ContactListener类函数实现,b2ContactListener是Box2D提供的抽象类,它的抽象函数:virtual void BeginContact ...
- 实例介绍Cocos2d-x中Box2D物理引擎:HelloBox2D
我们通过一个实例介绍一下,在Cocos2d-x 3.x中使用Box2D物理引擎的开发过程,熟悉这些API的使用.这个实例运行后的场景如图所示,当场景启动后,玩家可以触摸点击屏幕,每次触摸时候,就会在触 ...
- 实例介绍Cocos2d-x物理引擎:碰撞检测
碰撞检测是使用物理引擎的一个重要目的,使用物理引擎可以进行精确的碰撞检测,而且执行的效率也很高.在Cocos2d-x 3.x中使用事件派发机制管理碰撞事件,EventListenerPhysicsCo ...
- 实例介绍Cocos2d-x物理引擎:HelloPhysicsWorld
我们通过一个实例介绍一下,在Cocos2d-x 3.x中使用物理引擎的开发过程,熟悉这些API的使用.这个实例的运行后的场景,当场景启动后,玩家可以触摸点击屏幕,每次触摸时候,就会在触摸点生成一个新的 ...
- Cocos2d-x3.2总结---使用物理引擎进行碰撞检测
[转自]: http://blog.csdn.net/cbbbc/article/details/38541099 通常在游戏简单逻辑判断和模拟真实的物理世界时,我们只需要在定时器中判断游戏中各个精灵 ...
随机推荐
- wait/waitpid函数与僵尸进程、fork 2 times
一.僵尸进程 当子进程退出的时候,内核会向父进程发送SIGCHLD信号,子进程的退出是个异步事件(子进程可以在父进程运行的任何时刻终止) 子进程退出时,内核将子进程置为僵尸状态,这个进程称为僵尸进程, ...
- 转 MySQL中的共享锁与排他锁
原文链接在MySQL中的行级锁,表级锁,页级锁中介绍过,行级锁是Mysql中锁定粒度最细的一种锁,行级锁能大大减少数据库操作的冲突.行级锁分为共享锁和排他锁两种,本文将详细介绍共享锁及排他锁的概念.使 ...
- JEECG中datagrid方法自定义查询条件
自定义加添加查询条件的用法: CriteriaQuery cq = new CriteriaQuery(EquipmentEntity.class, dataGrid); //查询条件组装器 org. ...
- Android开发11——手机横屏和竖屏与android:configChanges
目前大多数手机都支持重力感应随之而来的就是屏幕方向改变的问题.对应普通开发者来说屏幕的随意改变也会带来困扰.在Google自带的doc里可以看到,如果设备的配置(Resources.Configura ...
- 在Visual Studio中使用NuGet管理项目库
NuGet是用来管理项目中引用的各个组件插件什么什么东西的东西,最近使用以后发现对于项目引用的维护非常方便. 暂时转一篇MSDN的文章,其实这个文章的内容就够了: http://msdn.micros ...
- [sh]. 点的含义
. 的含义 当前目录 隐藏文件 任意一个字符 生效配置文件
- 【Android】5.3 单选和复选
分类:C#.Android.VS2015: 创建日期:2016-02-07 一.简介 1.CheckBox 复选 [Checked]属性:是否选中. 2.RadioButton 单选 [Checked ...
- asp.net用三层实现多条件检索
众所周知,三层将项目分为界面层,业务逻辑层和数据訪问层(以最主要的三层为例) 相同都知道,多条件检索事实上就是依据用户选择的条件项,然后来拼sql语句 那么.既然要依据用户选择的条件项来拼sql语句, ...
- spring mvc 2.5.6配置
兼容公司老版本号项目.必须得用spring mvc2.5.6,那么问题来了. 怎么配置controller都抛出no mapping的错误.经过查文档得出下面配置.仅供參考. servlet-conf ...
- java NIO中的buffer和channel
缓冲区(Buffer):一,在 Java NIO 中负责数据的存取.缓冲区就是数组.用于存储不同数据类型的数据 根据数据类型不同(boolean 除外),提供了相应类型的缓冲区:ByteBufferC ...