【cocos2d-x游戏开发】使用关节
2014-11-03 15:53
225 查看
在场景中我们可以使用关节来让两个刚体联系在一起。
下面是效果图
首先创建一个物理世界
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), Vec2(0, boxB->getContentSize().width / 2)); //创建一个距离节点 world->addJoint(joint); //把节点加入到场景中 }
下面是效果图
相关文章推荐
- 【Cocos2d游戏开发之十一】使用Box2d物理系统以及在cocos2d框架添加Box2d物理系统lib包的方法
- 【iOS-Cocos2d游戏开发之十二】浅析使用C++/C/OC进行iOS游戏混编出现“failed with exit”问题与小结;
- 【iOS-Cocos2d游戏开发之十七】灵活使用精灵可视区域(TextureRect)与锚点(anchorPoint),并结合可视区域与锚点制作进度条!
- 【iOS-Cocos2d游戏开发】使用cocosBuiler制作cocos2d场景
- 【iOS-Cocos2d游戏开发】使用plist文件制作简单精灵
- 【iOS-Cocos2d游戏开发之十一】使用Box2d物理系统以及在cocos2d框架添加Box2d物理系统lib包的方法
- 【iOS-Cocos2d游戏开发之十一】使用Box2d物理系统以及在cocos2d框架添加Box2d物理系统lib包的方法
- 【iOS-cocos2d-X 游戏开发之八】使用Lua脚本进行游戏开发(基础篇) 推荐
- 【iOS-cocos2d-X 游戏开发之六】使用Base64算法对Cocos2dX自带CCUserDefault游戏存储数据编码!
- iOS-Cocos2d游戏开发】使用Zwoptex生成plist文件
- 【Cocos2d游戏开发之十二】浅析使用C++/C/OC进行iOS游戏混编出现“failed with exit”问题与小结;
- cocos2d-x开发游戏时,使用Texture packer来合并图片
- 【iphone游戏开发】iphone-Cocos2D游戏开发之二:精灵表的详细讲解(一)和Zwoptex工具的使用
- 【iOS-cocos2d-X 游戏开发之十一】New CCSprite()带来的错误&使用CCUserDefault及pvr.ccz在Cocos2dx中要注意!
- cocos2d-x开发游戏时,使用Texture packer来合并图片
- 【Cocos2d游戏开发之十二】浅析使用C++/C/OC进行iOS游戏混编出现“failed with exit”问题与小结;
- 【iOS-Cocos2d游戏开发之十七】灵活使用精灵可视区域(TextureRect)与锚点(anchorPoint),并结合可视区域与锚点制作进度条!
- 【Cocos2d游戏开发之十七】灵活使用精灵可视区域(TextureRect)与锚点(anchorPoint)
- iOS-Cocos2d游戏开发】使用plist文件制作简单精灵
- 【iOS-cocos2d-X 游戏开发之十一】使用New CCSprite() &CCUserDefault要注意! 推荐