Cocos2d-x v3.0物理系统 利用PhysicsEditor创建多边形

Cocos2d-x 3.0的新物理系统我就不必多说了,接触一段时间,感觉还是不错的。对于那些基本概念,网上的教程已经泛滥了,就不多说了,不过对于创建多边形物体的教程,还真不多,很多都是创建圆形和矩形,这两个很简单,传入图片的大小数据基本就可以搞定了。多边形的麻烦之处在于每个点的位置,Mac下有VertexHelper可以很轻松获取到多边形的每个点,然后创建出来,但Windows下,呃,确实我没找到什么好的工具,PhysicsEditor在以前使用Box2d原生的代码创建多边形还是挺好用的,现在就不太适合了,所以本篇的用法也是建立在它的之上做出来的,如果有好的办法,欢迎提出分享哈。

话不多说,看看如何利用PhysicsEditor来创建一个多边形。

打开PhysicsEditor,导入一张多边形,姑且咱们先拿个三角形开刀说,导入图片之后,选择上方的add polygon

将我们的三角形区域拉出来,像这样,

这样多边形的几个点位置就算完成了,下面的步骤很关键,

在右边Exporter选择“Chipmunk generic”,因为cocos封装的多边形顶点是按照顺时针的方向来的,和box2d不一样,box2d是反方向的。

当你选择之后,会看到图中多了一个点,那个是锚点的位置,所以接下来是设置锚点的位置,新版的物理系统在setPhysicsBody的时候是将Body绑定在图片的中心点位置,所以我们在PhysicsEditor中绘制的Body区域也需要将锚点设置在中心点,不然回过头在创建Body的时候还要设置偏移量offset。

如下图,将关键的地方设置成(0.5, 0.5)就可以了。

接下来,保存一下这个文件,是一个plist格式的,用个Notepad++打开下,找到下面有个点数组的位置,

我们就是需要这一组点数据,我想后面的事大家应该就很清楚了,打开VS,创建一个多边形咯。

<span style="white-space:pre">	</span>auto triangle = Sprite::create("CyanTriangle.png");
	triangle->setPosition(Point(size.width/2, size.height*0.8));
	Point points[3] = { Point(-50.00000, -43.50000), Point(0.00000, 43.50000), Point(51.00000, -43.50000) };

	auto polygonBody = PhysicsBody::createPolygon(points, 3);
	triangle->setPhysicsBody(polygonBody);
	addChild(triangle);

PhysicsBody::createPolygon的参数第一个是点数组,第二个是数组的大小,也就是边的个数。

运行看一下效果,

由于打开了debug模式,所以红色的区域非常贴切,可以用啦。

当然咯,PhysicsEditor也可以做凹多边形的,不过这个步骤要麻烦不少,但过程基本一样,简单过一遍,

拿个logo图片做一下,可以右键添加点哦,然后简单拉出这样的效果。然后还是保存我们的plist文件。

对于凹多边形,我们的策略基本就是采用addShape的方式,将其分割成多个凸多边形,然后组合在一起,他们的碰撞区域是组合起来的,所以没问题。

这个时候打开plist文件,可以看到是这样的点数组,

它的策略也是这样的,所以符合我们的要求,只是这么多点,咱们要一个一个添加,确实略显麻烦,没办法,继续来吧。。。。

一个数组点创建一个多边形Shape,所以代码是这样的。

<span style="white-space:pre">	</span>auto logo = Sprite::create("powered.png");
	auto logoBody = PhysicsBody::create();
	Point vert1[4] = { Point(1.00000, 134.50000), Point(24.00000, 111.50000), Point(-16.00000, 126.50000), Point(-22.00000, 149.50000) };
	logoBody->addShape(PhysicsShapePolygon::create(vert1, 4));
	Point vert2[4] = { Point(-100.00000, -149.50000), Point(24.00000, 111.50000), Point(101.00000, 111.50000), Point(101.00000, -149.50000) };
	logoBody->addShape(PhysicsShapePolygon::create(vert2, 4));
	Point vert3[4] = { Point(24.00000, 111.50000), Point(-100.00000, -149.50000), Point(-32.00000, 112.50000), Point(-16.00000, 126.50000) };
	logoBody->addShape(PhysicsShapePolygon::create(vert3, 4));
	Point vert4[3] = { Point(-32.00000, 112.50000), Point(-100.00000, -149.50000), Point(-100.00000, 112.50000) };
	logoBody->addShape(PhysicsShapePolygon::create(vert4, 3));
	logo->setPhysicsBody(logoBody);
	logo->setPosition(Point(size.width*0.8, size.height*0.7));
	addChild(logo);
	logo->setRotation(180);

好了,这样就可以了,我还旋转了一下,为了测试一下上面那一撮头发的碰撞区域,哈哈~

时间: 2024-12-30 17:52:35

Cocos2d-x v3.0物理系统 利用PhysicsEditor创建多边形的相关文章

1.物理系统PhysicsWorld,RayCast

 1 3.0物理系统PhysicsWorld T07PhysicsWorld.h #ifndef __T07PhysicsWorld_H__ #define __T07PhysicsWorld_H__ #include "T32.h" class T07PhysicsWorld : public Layer { public: CREATE_FUNC(T07PhysicsWorld); bool init(); Scene* getScene(){ return (Scene*)g

RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版新增系统参数管理

欲了解V3.0版本的相关内容可查看下面的链接地址. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版本发布 在V3.0版本的Web(Mvc.WebForm)与WinForm中我们新增了“系统参数管理”模块.系统参数管理的功能就非常广了,可以发挥我们的想象把所有可能的东西放在这儿定义,比如:系统的分页大小.系统的数据库类型.用户的访问限制等等一切可能的东西都可以在这儿定义,定义后通过框架提供的接口来使用即可.当然“系统参数”管理界面中有一些数据是系统生成的默认数据

RDIFramework.NET ━ .NET快速信息化系统开发框架钜献 V3.0 版本强势发布

继上个版本"RDIFramework.NET V2.9版本"的推出,受到了重多客户的认可与选择,V2.9版本是非常成功与稳定的版本,感谢大家的认可与长期以来的关注与支持.V3.0版本在V2.9版本的基础上做了重大更新,如:新增了"序列管理"."系统参数管理"."查询引擎与定义与管理"."消息集中管理".Web还新增了"MVC版本".代码生成器可以支持WebUI(WebForm.MVC两种

RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版本新增序列管理

欲了解V3.0版本的相关内容可查看下面的链接地址. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版本发布 在V3.0版本的Web(Mvc.WebForm)与WinForm中我们新增了“序列管理”模块.序列管理是对定义框架的序列或叫“排序码”进行管理,在很多界面中我们可以看到有排序按钮,这儿的定义就是针对排序按钮的,当然这儿不般不需要人工来维护,系统都是自动管理的,特殊情况下可能需要人工来维护,比如:我们想把某个表的序列以指定值开始递增,在这个界面我们就可以进行

RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版新增查询引擎管理

欲了解V3.0版本的相关内容可查看下面的链接地址. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版本发布 RDIFramework.NET — 基于.NET的快速信息化系统开发框架 — 系列目录 在V3.0版本的Web(Mvc.WebForm)与WinForm中我们新增了“查询引擎管理”模块.主要分为两部分”查询引擎管理“与”查询引定义“.”查询引擎管理“主要是对整个系统的查询引擎定义进行分类管理,用户可以对整个系统所要用到的查询定义在这儿进行合理分类.在查询

RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.0 版本强势发布

继上个版本"RDIFramework.NET V2.9版本"的推出,受到了重多客户的认可与选择,V2.9版本是非常成功与稳定的版本,感谢大家的认可与长期以来的关注与支持.V3.0版本在V2.9版本的基础上做了重大更新,如:新增了"序列管理"."系统参数管理"."查询引擎与定义与管理"."消息集中管理".Web还新增了"MVC版本".代码生成器可以支持WebUI(WebForm.MVC两种

团队排表系统V3.0最佳实践及使用说明

团队排表系统V3.0最佳实践 1.从我这里获取团队代号, 例如"tuanzhangshishabi" 2.打开网页 填写以下信息. 请注意: 最好所有的打工和老板都填上真实的QQ, 有利于发号和管理. 第一个填写我给的团队代码的人将会是管理员 3.进入主页,选择左侧老板管理,添加老板.  团员管理 添加团员.  记住所有的qq 帐号 密码 区服 都尽量填写真实, 操作方式: 双击编辑, 右键删除, 加号添加, 左键选中可以批量删除, 批量导入(还未实现). 可以按区服,职业查询. 团员

DeskPRO.v3.0.0.Enterprise.PHP.NULL 1CD(3维建模 CAM (计算机辅助制造)软件, 致力于尽可能快地建立3维立体模型并将 之转变成CNC数控机床能用的数据)

DDS产品: FEMtools.v3.3.Win32 1CD(振动灵敏度分析软件) FEMtools.v3.3.Win64 1CD Network Analysis Inc产品: Sinda/G.Application.Suite.v2.6 Working-ISO 1CD(有限差分析器软件) ECS产品: FemFat v4.7C 1CD(用于对部件进行疲劳测试的软件.它可为部件的安全使用提供快速可信的解决方案,并可结合NASTRAN,ABAQUS,ANSYS,I-DEAS,MEDINA,PAT

市面上未见FRI.Device.Rating.Program.V3.0.0.742+PipeFlow.Expert.2016.v7.30专业

FRI.Device.Rating.Program.V3.0.0.742美国精馏公司开发的化工软件     美国精馏公司开发的化工软件,市面上未见,会员拥有,可用于塔板(筛板, 浮阀)的严格的水力学计算   这是一个重大的改革,将使更多的DRP可持续升级程序.周五是规划的重大改进,继续为我们的会员提供价值. DLL转换项目成员的批准以便未来修改的新模型和功能添加DRP.QQ:16264558      TEL:13963782271   在DRP 3,计算引擎(DLL)进行了简化,并重新编写的C