在场景中我们可以使用关节来让两个刚体联系在一起。
首先创建一个物理世界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); //把节点加入到场景中}
下面是效果图
总结
以上是内存溢出为你收集整理的【cocos2d-x游戏开发】使用关节全部内容,希望文章能够帮你解决【cocos2d-x游戏开发】使用关节所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)