关于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 通常在游戏简单逻辑判断和模拟真实的物理世界时,我们只需要在定时器中判断游戏中各个精灵 ...
随机推荐
- DBA_实践指南系列5_Oracle Erp R12日常运维和管理(案例)
2013-12-05 Created By BaoXinjian
- Android github上开源项目、酷炫的交互动画和视觉效果地址集合
Android上开源的酷炫的交互动画和视觉效果:http://blog.csdn.net/u013278099/article/details/50323689 Awesome-android-ui: ...
- Python直接赋值、浅拷贝和深度拷贝解析
直接赋值:其实就是对象的引用(别名). 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象. 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象 ...
- Android Intent Scheme URLs攻击
0x0 引言 我们知道,在Android上的Intent-based攻击非常普遍.这样的攻击轻则导致应用程序崩溃.重则可能演变提权漏洞.当然,通过静态特征匹配,Intent-Based的恶意样本还是非 ...
- Latex 环境下“中文字体”的使用
Latex 环境下“中文字体”的使用 使用CTex自带编辑器WinEdt,在该环境下如何使用中文字体呢?作为一个菜鸟,折腾了好几天,最终基本解决了这个问题.现在整理下,分享给后来者. 对于使用中文字体 ...
- FBX BlendShape/Morph动画解析
目前fbx 2015.1中支持三种变形器:skinDeformer,blendShapeDeformer,vertexCacheDeformer.定义在fbxdeformer.h中: enum EDe ...
- NUMA体系结构详解
1. NUMA的几个概念(Node,socket,core,thread) 对于socket,core和thread会有不少文章介绍,这里简单说一下,具体参见下图: 一句话总结:socket就是主板上 ...
- iOS __weak学习碰到的疑问
__weak弱引用并不持有对象,所以赋值给__weak修饰符的变量也不会改变计数器的值. main.m id __strong obj3 = nil; id __weak obj1= ...
- perl内置特殊变量查询
perl中有许多预定于的内置变量,想$_,$,,$>,等等,基本是记不住全部的用法,如果在因特网查阅,有很麻烦,信息不准啦,说的不细啦,但是,万能的perldoc早就帮我们准备好了. 你需要做的 ...
- Hadoop权威指南学习笔记一
Hadoop简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出.一起学习一起进步. 转载请注明:http://blog.csdn.net/ ...