PhysicsBody物理世界
来源:互联网 发布:js中的date对象 编辑:程序博客网 时间:2024/05/21 22:41
介绍
在3.2的重力系统,创建场景就不能用Scence *s = Scence::create(); 要用:Scence *s = Scence::createWithPhysics();
bool T07PhysicsWorld::init(){Layer::init();PhysicsBody* bodyA;PhysicsBody* bodyB;{//createCircle 创建一个圆形的bodyPhysicsBody* body = PhysicsBody::createCircle(20, PhysicsMaterial(1.0f, 1.0f, 0.0f));//PhysicsMaterial(密度,弹力,摩擦力)bodyA = body;Sprite* sprite = Sprite::create();#if 0/*此处精灵看不见,因为没有具体的精灵,在3.2里我们可以把这个body的边框画出来,在场景那边设置下:Scene* s = Scene::createWithPhysics();//就是下面这两句PhysicsWorld* world = s->getPhysicsWorld();//取出世界world->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);*/#endifsprite->setPhysicsBody(body);addChild(sprite);sprite->setPosition(winSize.width / 2, winSize.height / 2);//设置速度,在x, y方向的速度。body->setVelocity(Vect(100, 200));}{//加四边形边框PhysicsBody* body = PhysicsBody::createEdgeBox(winSize, PhysicsMaterial(1.0f, 1.0f, 0.0f));bodyB = body;Sprite* sprite = Sprite::create();addChild(sprite);sprite->setPhysicsBody(body);sprite->setPosition(winSize.width / 2, winSize.height / 2);}//碰撞检测{//body碰撞要设置BitMask,表示这个body要不要计算碰撞bodyA->setContactTestBitmask(0x1);bodyB->setContactTestBitmask(0x1);//设置是哪个组的。组与组之间碰撞检测,组内部不做碰撞检测。bodyA->setGroup(1);bodyB->setGroup(2);//碰撞检测auto ev = EventListenerPhysicsContactWithBodies::create(bodyA, bodyB);//当碰撞开始时调用此函数ev->onContactBegin = [](PhysicsContact& contact){CCLog("Began Contact...........");return true;};_eventDispatcher->addEventListenerWithSceneGraphPriority(ev, this);}//也可以通过形状做碰撞检测{//一个body对应多个Shapesauto ev = EventListenerPhysicsContactWithShapes::create(bodyA->getShapes().at(0),bodyB->getShapes().at(0));ev->onContactBegin = [](PhysicsContact& contact){CCLog("Shape Began Contact...........");return true;};_eventDispatcher->addEventListenerWithSceneGraphPriority(ev, this);}{auto ev = EventListenerPhysicsContactWithGroup::create(3); //3是Gid等于3的有碰撞,就调用。类推。ev->onContactBegin = [](PhysicsContact& contact){CCLog("Group Began Contact...........");return true;};_eventDispatcher->addEventListenerWithSceneGraphPriority(ev, this);}return true;}
一个body可以对应多个shape,比如复杂的形状可以拆分为几个shape,如乌龟可以将头和脚等分开。
{PhysicsBody* body = PhysicsBody::create();PhysicsShape* shape1 = PhysicsShapeBox::create(Size(40, 40), PHYSICSBODY_MATERIAL_DEFAULT, Vec2::ZERO);body->addShape(shape1);PhysicsShape* shape2 = PhysicsShapeCircle::create(10, PHYSICSBODY_MATERIAL_DEFAULT, Vec2(-30, 0));body->addShape(shape2);//Sprite* sprite = Sprite::create();Node* node = Node::create();node->setPhysicsBody(body);addChild(node);node->setPosition(winSize.width / 2, winSize.height / 2);}// 边框{PhysicsBody* body = PhysicsBody::createEdgeBox(winSize, PhysicsMaterial(1.0f, 1.0f, 0.0f));Sprite* sprite = Sprite::create();addChild(sprite);sprite->setPhysicsBody(body);sprite->setPosition(winSize.width / 2, winSize.height / 2);}
0 0
- PhysicsBody物理世界
- Cocos2d-x 封装物理引擎PhysicsBody异常解决方案
- 杂谈:逻辑世界,物理世界
- PhysicsBody 理解
- 创建物理世界
- cocos2dx 物理世界
- cocos2dx Physics 物理世界
- 简单的物理世界
- 物理引擎Box2D之世界
- Sprite Kit 模拟物理世界
- 【观世界】物理-事理-人理
- Cocos物理世界(box2)
- Cocos2d PhysicsBody Test.
- PhysicsBody相关API说明
- Box2D 物理引擎---创建一个简单的模拟物理世界
- 世界十大经典物理实验
- Havok VS PhysX 漫谈物理加速世界!
- AndEngine 物理世界引擎 JNI 引入
- Tablayout(Android) 的几个重要属性
- java Class.getResource和ClassLoader.getResource的区别分析
- JAVA 读取XML实例
- leetoj Partition List
- Jquery Easyui datagrid如何在动态获取当前选中行的值
- PhysicsBody物理世界
- Spring MVC入门
- SQL Sever——无法连接到(local)。“未配置远程连接”和“请求失败或服务未及时响应”
- 写代码的规则
- adb命令--之查看内存占用大小
- Leetcode48: Summary Ranges
- 【STM库应用】stm32 之 TIM (详解二 脉冲宽度、周期测量)
- C# GUID
- ovirt-engine管理引擎的功能拓展方法