物理引擎中不规则物体的碰撞检测
2014-10-15 19:17
363 查看
在运用物理引擎的时候,经常回出现这种情况,不规则物体的碰撞检测无法更加精确的测量,那么,小杰今天就带您一起解决这个问题!!!
首先下载一个windows下面的软件 名称是:PhysicsEditor ,这个软件可以帮助你设计不规则的图形。软件的使用方法在这里不具体讲解了,说一下注意的问题,添加进精灵后 :按照这个步骤走
![](https://oscdn.geek-share.com/Uploads/Images/Content/202006/08/6bad3f144ccac5d47bdbc83986e7856a)
好了,这时候 做完了就会生成 plist文件,把它和png图片一起拷进资源目录下面:
定义一个成员方法:
实现:
调用它:
好了,这样基本就解决了!!,运行如图:
首先下载一个windows下面的软件 名称是:PhysicsEditor ,这个软件可以帮助你设计不规则的图形。软件的使用方法在这里不具体讲解了,说一下注意的问题,添加进精灵后 :按照这个步骤走
好了,这时候 做完了就会生成 plist文件,把它和png图片一起拷进资源目录下面:
定义一个成员方法:
std::vector<std::vector<Vec2>> getShapeFromPlistFile(std::string fileName);
实现:
std::vector<std::vector<Vec2>> Chipmunck::getShapeFromPlistFile(std::string fileName){ std::vector<std::vector<Vec2>> vectors; //从文件中读取plist文件,将内容读取到 vec中 ValueVector vec = FileUtils::getInstance()->getValueVectorFromFile(fileName); for (int i =0;i<vec.size();i++){//遍历vec,得到所有的形状 ValueVector shape = vec.at(i).asValueVector(); std::vector<Vec2> points; for (int j=0;j<shape.size();j++){//遍历形状,拿到所有的点 Vec2 point = PointFromString(shape.at(j).asString()); points.push_back(point);//所有的点放在集合中 } vectors.push_back(points);//所有的 形状 放在集合中 } return vectors; }
调用它:
void Chipmunck::addSprites(){ auto circleSp = Sprite::create("c.png"); circleSp->setPosition(visSize.width/2,visSize.height/2); this->addChild(circleSp); auto body = PhysicsBody::createCircle(circleSp->getContentSize().width/2); body->setMass(10000); body->setVelocity(Vec2(0,-1000)); circleSp->setPhysicsBody(body); auto circleSp2 = Sprite::create("c.png"); circleSp2->setPosition(visSize.width/2,20); this->addChild(circleSp2); auto body2 = PhysicsBody::createCircle(circleSp->getContentSize().width/2); body2->setMass(10000); body2->setDynamic(false); circleSp2->setPhysicsBody(body2); auto paoku = Sprite::create("paoku 00188.png"); paoku->setPosition(Vec2(300,200)); this->addChild(paoku); //通过传过去文件名字 获取 返回来的 所有 图形的集合(每个图形中存放着很多组成这个图形的所有的点) std::vector<std::vector<Vec2>> shapes = this->getShapeFromPlistFile("test.plist"); //定义一个刚体 auto ployon = PhysicsBody::create(); for (auto shape:shapes){//遍历图形集合中的每个 图形 //这里的shape.data是一个指向 第一个元素的指针 auto points = PhysicsShapePolygon::create(shape.data(),(int)shape.size());//根据这个图形创建刚体 //points是一个点的数组 ployon->addShape(points);//把所有的 放在 刚体中 } paoku->setPhysicsBody(ployon); }
好了,这样基本就解决了!!,运行如图:
相关文章推荐
- cocos2dx物理引擎和碰撞检测(六)物体Bodies
- cocos2dx 3.x 物理引擎接触检测掩码、碰撞掩码和类别掩码问题解析
- 实例介绍Cocos2d-x物理引擎:碰撞检测
- 关于碰撞检测和物理引擎
- Cocos2d-x 使用物理引擎进行碰撞检测
- [转载]Cocos2d-x3.2总结(四)使用物理引擎进行碰撞检测
- 使用物理引擎进行碰撞检测
- 分享一个超高效的不规则物体碰撞检测的类~~
- Bullet3物理引擎碰撞检测相关代码片段
- 实例介绍Cocos2d-x物理引擎:碰撞检测
- Cocos2d-x3.2总结:使用物理引擎进行碰撞检测
- cocos2d-x-3.3-020-碰撞检测2-物理引擎初探
- Cocos2d-x3.2总结---使用物理引擎进行碰撞检测
- Cocos2dx物理引擎碰撞检测总结
- cocos2d-x-3.3-021-碰撞检测3-物理引擎碰撞过滤
- Cocos2d-x中Physics物理引擎碰撞检测,setCategoryBitmask,setContactTestBitmask,setCollisionBitmask
- 实例介绍Cocos2d-x物理引擎:碰撞检测
- 使用cocos2d-js-3.0RC1中的物理引擎chipmunk模拟的“别碰钉子”源码分享(含碰撞检测)
- cocos2dx物理引擎和碰撞检测(五)框架Fixtures
- 物理引擎里的碰撞检测