物理引擎中不规则物体的碰撞检测

物理引擎中不规则物体的碰撞检测,第1张

概述在运用物理引擎的时候,经常回出现这种情况,不规则物体碰撞检测无法更加精确的测量,那么,小杰今天就带您一起解决这个问题!!! 首先下载一个windows下面的软件 名称是:PhysicsEditor ,这个软件可以帮助你设计不规则的图形。软件的使用方法在这里不具体讲解了,说一下注意的问题,添加进精灵后 :按照这个步骤走 好了,这时候 做完了就会生成 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);    }  

好了,这样基本就解决了!!,运行如图:


总结

以上是内存溢出为你收集整理的物理引擎中不规则物体的碰撞检测全部内容,希望文章能够帮你解决物理引擎中不规则物体的碰撞检测所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1003940.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存