【cocos2d-x游戏开发】使用关节
发布时间:2020-12-14 19:19:18 所属栏目:百科 来源:网络整理
导读:在场景中我们可以使用关节来让两个刚体联系在一起。 首先创建一个物理世界 Scene* HelloWorld::createScene(){ // 'scene' is an autorelease objectauto scene = Scene::createWithPhysics(); scene-getPhysicsWorld()-setDebugDrawMask(PhysicsWorld::DEBU
在场景中我们可以使用关节来让两个刚体联系在一起。 首先创建一个物理世界Scene* HelloWorld::createScene() { // 'scene' is an autorelease object auto scene = Scene::createWithPhysics(); scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL); // 'layer' is an autorelease object auto layer = HelloWorld::create(); layer->setPhyworld(scene->getPhysicsWorld()); // add layer as a child to scene scene->addChild(layer); // return the scene return scene; } 然后在init函数里面设置世界//定义世界的边界 auto body = PhysicsBody::createEdgeBox(visibleSize,PHYSICSBODY_MATERIAL_DEFAULT,5.0f); auto edgeNode = Node::create(); edgeNode->setPosition(Vec2(visibleSize.width / 2,visibleSize.height / 2)); edgeNode->setPhysicsBody(body); //把世界的边界加到这个节点上 this->addChild(edgeNode); //把世界节点加到场景中 setTouchEnabled(true); //设置为单点触摸 setTouchMode(Touch::DispatchMode::ONE_BY_ONE); 然后响应鼠标点击函数bool HelloWorld::onTouchBegan(Touch* touch,Event* event)//单点触摸 { Vec2 location = touch->getLocation();//获取触摸点坐标 addNewSpriteAtPosition(location); return false; } 然后在点击位置添加精灵
void HelloWorld::addNewSpriteAtPosition(Vec2 p) { Size visibleSize = Director::getInstance()->getVisibleSize();//获取屏幕尺寸 Vec2 origin = Director::getInstance()->getVisibleOrigin();//获取窗口原点坐标 auto boxA = Sprite::create("1.png");//创建精灵 boxA->setPosition(origin + p); auto boxABody = PhysicsBody::createBox(boxA->getContentSize());//创建body boxA->setPhysicsBody(boxABody);//把body绑定到制定精灵上 addChild(boxA,10,100);//把带有身体的精灵添加到场景中 /*addChild函数的参数有三个: 第一个就是精灵的指针 第二个就是绘制层的顺序,默认参数值为0,表示最高优先层导入,该值越大表示该层在最后加载(在最高一层) 第三个参数为Tag标记,如果以后在该类的其他方法中要访问这个变量时可以通过调用函数getChildByTag来取回该对象, 然后可以对该对象进行操作,这样做的好处是降低系统资源的占用*/ auto boxB = Sprite::create("2.png"); boxB->setPosition(origin + p + Vec2(0,-120)); auto boxBBody = PhysicsBody::createBox(boxB->getContentSize()); boxB->setPhysicsBody(boxBBody); addChild(boxB,20,101); //boxABody->setContactTestBitmask(0xFFFFFFFF); //boxBBody->setContactTestBitmask(0xFFFFFFFF); auto world = this->getScene()->getPhysicsWorld();//从场景中获得物理世界的对象 PhysicsJointDistance* joint = PhysicsJointDistance::construct(boxABody,boxBBody,Vec2(0,0),boxB->getContentSize().width / 2)); //创建一个距离节点 world->addJoint(joint); //把节点加入到场景中 } 下面是效果图 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |