1、说明:

3.0以后将box2d和chipmunk这两个物理引擎进行了封装,使用起来很的便利

2、详细用法:

1、创建物理世界场景
auto scene = Scene::createWithPhysics();
scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL); //调试时使用
2、在场景中加入重力
Vect gravity = Vect(0.0f, -10.0f);  //-10表示重力向下
scene->getPhysicsWorld()->setGravity(gravity);
3、创建物理边界,边界有碰撞体
auto body = PhysicsBody::createEdgeSegment(Point(0,0),Point(600,0),PHYSICSBODY_MATERIAL_DEFAULT, 3); //3是边线度
auto edgeNode = Node::create();
edgeNode->setPosition(Point(0,10));
edgeNode->setPhysicsBody(body);
scene->addChild(edgeNode);
          4、创建精灵,给精灵绑定刚体,这个封装一个加入刚体的方法,怎样创建精灵这里不做过多的说明
void GameScene::addBoxBodyForSprite(Sprite *sprite){
auto body = PhysicsBody::createCircle(sprite->getContentSize().width / 2);
// body->setCategoryBitmask(0); //当为0不仅能闯过并且还检測不到碰撞
body->setContactTestBitmask(1); //有碰撞检測
body_player->setRotationEnable(false); //设置是否旋转
/** 设置body是否受引力影响 */
body->setGravityEnable(true); //是否受重力影响
sprite->setPhysicsBody(body);
5、碰撞监听 在onEnter中绑定监听
void GameScene::onEnter()
{
Layer::onEnter();
auto contactListener = EventListenerPhysicsContact::create();
contactListener->onContactBegin = CC_CALLBACK_1(GameScene::onContactBegin, this); //刚開始碰撞,监听
contactListener->onContactPreSolve = CC_CALLBACK_2(GameScene::onContactPreSolve, this); //碰撞中监听
auto dispatcher = Director::getInstance()->getEventDispatcher();
dispatcher->addEventListenerWithSceneGraphPriority(contactListener, this);
}
6、開始碰撞监听函数
bool GameScene::onContactBegin( const PhysicsContact& contact){
auto spriteA = (Sprite*)contact.getShapeA()->getBody()->getNode();
auto spriteB = (Sprite*)contact.getShapeB()->getBody()->getNode();
return true; //返回true,才干够继续监听其他碰撞
}
7、碰撞中的监听(反弹力、摩擦力等属性可在此改动)
bool GameScene::onContactPreSolve(PhysicsContact& contact, PhysicsContactPreSolve& solve){
// solve.setFriction(0); //摩擦力
solve.setRestitution(0); //反弹力
// solve.setSurfaceVelocity(Point(200,200)); //反弹运动方向
return true;
}

8、physicsShape
//能够依据刚体得到PhysicsShape,然后改动PhysicsShape属性,包含,密度反弹力等。跟在碰撞检測中改动效果一样
//Vector<PhysicsShape*> physicShape = player->getPhysicsBody()->getShapes();
Vector<PhysicsShape*> physicShape = body_player->getShapes();
for(int i=0; i<physicShape.size();i++){
physicShape.at(i)->setDensity(0); //密度
physicShape.at(i)->setRestitution(0); //反弹力
}

3、射线使用

1、实现

Point point1(10,10);
Point point2(1000,1000);
Point point3 = point2;
auto func = CC_CALLBACK_3(GameScene::anyRay, this);
scene->getPhysicsWorld()->rayCast(func, point1, point2, &point3); //起始点、终点、保存碰撞的坐标位置 scene为開始创建的物理世界scene
//以下是画红色线方便调试查看
DrawNode *_node = DrawNode::create();
this->addChild(_node);
_node->drawSegment(point1, point2, 1, Color4F(1.0f, 0.0f, 0.0f, 1.0f));
2、射线碰撞监听
bool GameScene::anyRay(PhysicsWorld& world, const PhysicsRayCastInfo& info, void* data)
{
*((Point*)data) = info.contact;
return false;
}

4、參考文献

http://blog.csdn.net/v_leg/article/details/22584743

http://blog.csdn.net/st75033562/article/details/29574939

cocos2d-x3.0 Physics新的物理引擎的更多相关文章

  1. cocos2d-x3.0 解释具体的新的物理引擎setCategoryBitmask()、setContactTestBitmask()、setCollisionBitmask()

    转载请注明出处:游戏开发实验室http://blog.csdn.net/u010019717/article/details/32942641 我在编写游戏的时候遇到了这个问题.  物理引擎其它的内容 ...

  2. 转:Bullet物理引擎不完全指南(Bullet Physics Engine not complete Guide)

    write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 前言 Bullet据称为游戏世界占有率为第三的物理引擎,也是前几大引擎目前唯一能够 ...

  3. 大约cocos2d-X 3.x使用引擎版本自带的物理引擎Physics

    今天打算用BOX2D物理引擎, 我想我以前听说过一些时间cocos2d-X在3.0版本封装自己的物理引擎Physics, 听名字很霸气量, 这的确是一个比BOX2D非常多( 毕竟是基于BOX2D封装的 ...

  4. ROS_Kinetic_07 ROS中机器人三维物理引擎高保真仿真利器gazebo 7.0

    ROS_Kinetic_07 ROS中机器人三维物理引擎高保真仿真利器gazebo 7.0 ROS kinetic中的gazebo版本是7.0,有很多新的特性. 首先,启动gazebo: ~$ gaz ...

  5. cocos2d-x 3.0 使用最新物理引擎的一个源代码实例

    1.碰撞函数參数由两个变成一个了 2.检測不到碰撞.须要设置那三个參数.同一时候还要设置成动态的. body进行设置. 3.初始入口文件也发生了改变. 附录上我近期调试好的cocos2d-x 3.1 ...

  6. SPRITEKIT游戏框架之关于PHYSICS物理引擎属性

    Spritekit提供了一个默认的物理模拟系统,用来模拟真实物理世界,可以使得编程者将注意力从力学碰撞和重力模拟的计算中解放出来,通过简单地代码来实现物理碰撞的模拟,而将注意力集中在更需要花费精力的地 ...

  7. 【英宝通Unity4.0公开课学习 】(四)GUI到物理引擎

    今天老妈打电话来说和老爸吵架了... 真的是家家都有本难念的经啊.前后帮她分析了个半小时才帮她解开心结...现在想想老爸还是蛮可怜的,连分享的人都木有 讲的GUI都看睡着了...因为想着可以用NGUI ...

  8. [Cocos2D-x For WP8]Box2D物理引擎

    物理引擎通过为刚性物体赋予真实的物理属性的方式来计算运动.旋转和碰撞反映.为每个游戏使用物理引擎并不是完全必要的—简单的“牛顿”物理(比如加速和减速)也可以在一定程度上通过编程或编写脚本来实现.然而, ...

  9. Cocos2d-x3.2 使用物理引擎进行碰撞检测[转]

    通常在游戏简单逻辑判断和模拟真实的物理世界时,我们只需要在定时器中判断游戏中各个精灵的条件是否满足判断条件就可以了.例如,在飞机大战中,判断我方子弹和敌机是否发生碰撞一般在定时器中通过敌机所在位置的矩 ...

随机推荐

  1. zoj 3209.Treasure Map(DLX精确覆盖)

    直接精确覆盖 开始逐行添加超时了,换成了单点添加 #include <iostream> #include <cstring> #include <cstdio> ...

  2. 【BZOJ2038】【莫队】小z的袜子

    Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...

  3. Java学习随笔——RMI

    RMI(Remote Method Invocation)远程方法注入,用来实现远程方法调用,是实现分布式技术的一种方法.RMI提供了客户辅助对象和服务辅助对象,为客户辅助对象创建了和服务对象相同的方 ...

  4. 系统默认字体Mac OS,Windows,XP,Lunix

    可查获的信息太少,目前得知的是以中文为例, OS : Helvetical,Lucida Grande(西文默认字体) Windows 7: Microsoft Yahei Xp : Simsun,T ...

  5. 【Linux】vi编辑器命令

       1)进入vi的命令 vi filename :             打开或新建文件,并将光标置于第一行首 vi +n filename :          打开文件,并将光标置于第n行首 ...

  6. android开发学习笔记:圆角的Button

    转自:http://www.cnblogs.com/gzggyy/archive/2013/05/17/3083218.html 在res目录下的drawable-mdpi建立xml文件shape.x ...

  7. Object-C非正式协议与正式协议的区别

    Object-C非正式协议与正式协议的区别 这两个概念困扰我很久了,一直都很像搞清楚到非正式协议和正式协议有什么区别和联系,下面结合网上的资料和自己的看法谈谈这个问题. 一.非正式协议 显然这个名词是 ...

  8. Unity问答——请教一下NGUI的图片转换问题

    这篇博客源自我在泰课在线的回答.链接:http://www.taikr.com/group/1/thread/92 问:请教一下NGUI的图片转换问题 1.NGUI能不能把导入的方形图片转成圆形的(因 ...

  9. 转:推荐!国外程序员整理的 C++ 资源大全

    原文来自于:http://blog.jobbole.com/78901/ 关于 C++ 框架.库和资源的一些汇总列表,由 fffaraz 发起和维护. 内容包括:标准库.Web应用框架.人工智能.数据 ...

  10. MVC---Case 1

    <!DOCTYPE html> <html lang="en"> <head> <title>Backbone.js, Requir ...