关于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 通常在游戏简单逻辑判断和模拟真实的物理世界时,我们只需要在定时器中判断游戏中各个精灵 ...
随机推荐
- 哇塞!HTML5 实现的雨滴效果 CSS发抖
http://dreamsky.github.io/main/blog/rainy-day/ Rainy Day – 哇塞! HTML5 实现的雨滴效果 http://www.webhek.com/m ...
- js实现多物体运动框架并兼容各浏览器
首先,我们须要知道在js中获取对象的宽度如offsetWidth等.可能会存在一些小小的bug.原因之中的一个在于offsetWidth只不过获取盒子模型中内容的部分宽度.并不包括内边距,边框和外边距 ...
- js 倒计时 (时分秒版本)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- vmware esxi 过期,激活
首先我们打开vSphere Client,登录esxi主机 他会提示你,说你的esxi主机的评估期还剩多长时间 我们现在去激活,我们下载esxi的注册机 然后点击配置--->已获许可的功能--- ...
- Windows环境下文件的彻底删除与恢复,推荐几个工具(整理)
1. 背景 在Windows(从XP到Win7)中删除文件时,无论是Delete或者是Shift+Delete,都不能真正的删除文件,它做的事情只是从文件分配表中删除了该文件的信息,而并未将文件从存储 ...
- Win7中安装Windows PowerShell 3.0
win7内置的powershell是2.0,现在已经明显落伍了,但win系统软件更新,需要解决依赖问题,so,按下面步骤安装即可. 1. 安装Microsoft .NET Framework 4.0的 ...
- Mac升级bash到最新版本
mac自带的bash为3.2版本,而最新的bash是4.9,需要升级了,才能支持关联数组等新特性. 1.brew install bash 2.安装到/usr/local/bin/bash里面.可以通 ...
- RhinoMock学习-Stub方法
// Arrange var stub = MockRepository.GenerateStub<IDemo>(); stub.Stub(x => x.StringArgStrin ...
- node js 调试方法
1. node-debug tutorial 大家对nodejs调试应该都比较头疼,至少我这个不用IDE写js的人很头疼这个,其实node的生态圈非常好 有非常好的工具和非常潮的开发方式 这里总结了3 ...
- coreos 创建使用密钥登陆的ubuntu 基础镜像
下载官方镜像 core@localhost ~ $ docker pull ubuntu:14.04 #假设官方下载较慢,可到www.dockerpool.com下载标准镜像 core@localho ...