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

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


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


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

<img src="http://www.2cto.com/uploadfile/Collfiles/20140823/201408230920218.png" alt="" http:="" www.2cto.com="" kf="" ware="" vc="" "="" target="_blank" class="keylink" style="box-sizing: border-box; border: medium none; vertical-align: middle; display: block; margin: 0px auto; max-width: 100%; width: 2090.67px; height: auto;">vcfQzsf40/LArbP2wLSjrM/x1eLR+aOsPC9wPgo8cD48aW1nIHNyYz0="http://www.2cto.com/uploadfile/Collfiles/20140823/2014082309202110.png" alt="\">

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

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

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

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

\

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

\

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

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,所以代码是这样的。

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);

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



本文转自:http://m.2cto.com/kf/201408/327977.html

转载于:https://www.cnblogs.com/Anzhongliu/p/6091778.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/271634.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

公众号开发 单独 给某个用户 推送消息_韩国5G用户6月底已达134万 较5月底增加近70%...

中关村在线消息&#xff1a;韩国三大运营商SK、KT和LG率先于去年12月开始向企业用户提供商用5G 服务&#xff0c;今年4月初推出面向个人消费者的5G民用服务。韩国作为全球首个推出5G 服务的国家&#xff0c;他们的5G用户数量在6月时已经突破100万大关。日前韩国公布6月底最新的…

程序语言的概念知识笔记

1、低级语言和高级语言 计算机指令程序&#xff1a;0、1 组成的机器指令序列。特点&#xff1a;效率低、可读性差、难以维护。 汇编指令&#xff1a;用常用的符号代替0、1 序列来 表示机器指令&#xff0c;例如用ADD表示加法。 高级语言&#xff1a;面向对象设计的各类应用的程…

java lambda 表达式中的双冒号和箭头的用法 ::

先构造一些数据,创建一个User类 java lambda 表达式中的双冒号的用法 &#xff1a;&#xff1a; 双冒号运算就是Java中的[方法引用],[方法引用]的格式是 类名::方法名 如下图所示 User是一个类, getAge是方法名,注意是方法名呀&#xff0c;后面没有括号()的。为什么不要括号…

linux内核设计与实现 中文第三版 pdf_大牛推荐的5本 Linux 经典必读书

今天给大家推荐5本Linux学习相关的书籍&#xff1b;这些书籍基本都是很多大牛推荐过&#xff0c;并且深受业界好评的书&#xff1b;虽然只有5本&#xff0c;但是相信把5本全都认真看过的同学应该不多吧&#xff1f;希望这些书能够帮助你进阶为大牛&#xff01;5.《鸟哥的 Linux…

号称最好的国产操作系统在 Windows 10 面前能否一战?

统信软件旗下的UOS操作系统正式推出UOS V20个人版&#xff0c;并开启99元预售活动。统信UOS虽名不见经传&#xff0c;但身披“国产操作系统”外衣的它却让科技圈炸开了锅。有人说它是“国货之光”&#xff0c;堪称最好的国产系统&#xff0c;但也因为“收费”的问题引发一致批评…

js打开android应用程序,浏览器通过JS打开Android程序

做项目的时候&#xff0c;项目中有个需求&#xff0c;需要通过网页打开app&#xff0c;听到这个功能&#xff0c;我先是蛋疼了一会&#xff0c;但是在网上查了一下资料发现原理其实很简单&#xff0c;本质就是通过浏览器输入我们本地android程序的路径&#xff0c;不过这个路径…

lamba统计最大值,最小值,平均值,总和,个数

代码如下: List<Integer> ages Arrays.asList(1,3,5,7,8,10,12); IntSummaryStatistics intSummaryStatistics ages.stream().mapToInt(e -> e).summaryStatistics(); System.out.println("最大值: " intSummaryStatistics.getMax()); System.out.print…

程序语言的组成知识笔记

程序语言的基本成分包括数据‘运算、控制、传输。 1、程序语言的数据成分 数据成分指程序中的数据对象&#xff0c;数据是程序程序操作的对象&#xff0c;具有存储类型、数据类型、数据名称、作用域、生存周期等属性。 1.1 常量和变量 按照程序运行时数据能否改变&#xff0c;将…

python车牌识别逆光怎么办代码_这摄像头除了能逆光识别车牌,还会跟人打招呼?...

前段时间&#xff0c;笔者偶然在某宝上发现了一款变光全彩的智能警戒摄像头&#xff01;这款摄像头的型号为JA-F8&#xff0c;是一台室外防水枪机。说实话&#xff0c;这东西外观有点奇葩&#xff0c;谈不上好看。但正是因为它“骨骼精奇”&#xff0c;我才抱着好奇的心态点了进…

Executors创建线程池

java jdk1.5提供线程池 在java.util.concurrent包下提供工厂类Executors用于生产线程池&#xff0c;Executors提供了4种线程池 newFixedThreadPool&#xff1a; 创建一个线程池&#xff0c;该线程池重用固定数量的从共享无界队列中运行的线程。 newScheduledThreadPool&#x…

Maven项目中使用JUnit进行单元测试

1.打开maven项目中的pom.xml&#xff0c;添加JUnit 的jar包 2.在src/test/java下右键新建JUnit Test Cast 转载于:https://www.cnblogs.com/liaojie970/p/5588326.html

汇编程序基本原理知识笔记

1、汇编语言的概念 定义&#xff1a;为特定计算机或计算机系统设计的面向机器的符号化程序设计语言。汇编程序也就是用汇编语言编写的程序。计算机要运行汇编程序需要用专门的翻译程序进行翻译&#xff0c;然后计算机才可以识别。 汇编语句的分类&#xff1a;指令语句、伪指令语…

linux虚拟主机_Windows虚拟主机和linux虚拟主机有什么区别?

不少租用虚拟主机的用户在问一个同样的问题&#xff1a;windows空间和linux空间哪个好?这里给大家做一下全面的科普。一、windows空间和linux空间的区别系统的不同①windows空间则是由windows系统的服务器开设出来的空间&#xff0c;其中windows server系统环境大多为win2008&…

编译程序基本原理的知识笔记

编译程序的作用是把某高级语言书写的源程序翻译成与之等价的目标程序。 1、编译过程 1.1 词法分析 编译过程的第一阶段主要任务是对源程序从前往后&#xff08;从左往右&#xff09;逐个字符扫描&#xff0c;从中识别出一个个单词符号。“单词”是程序设计语言的基本语法单位&a…

lamaba中reduce方法将集合中的所有整数相加,并返回其总和

reduce&#xff1a;也是对所有值进行操作&#xff0c;但它是将所有值&#xff0c;按照传入的处理逻辑&#xff0c;将结果处理合并为一个 如&#xff1a;将集合中的所有整数相加&#xff0c;并返回其总和 下面看个例子: 如&#xff1a;将集合中的所有整数相加&#xff0c;并返…

mx2 android os耗电,魅族MX3 Flyme OS 3.2充电慢、耗电快问题的解决方法详解

一个星期前刷了3.2&#xff0c;但充电和耗电问题一直困扰着我&#xff0c;我的魅兔主要出现以下问题&#xff1a;1.充电慢&#xff0c;基本四个小时充满。如果一边玩一边充&#xff0c;甚至会掉电。2.耗电极快&#xff0c;待机一小时掉电10%&#xff0c;待机一晚掉电50%。倒是出…

UML入门之类图教程

一 简单实例电话父类telphone 拥有发消息和打电话接口Playgame 能够打游戏AndroidPhone 重写了发消息 继承于telphoneMacPhone 除了基础打电话和发消息&#xff0c;还能打游戏 继承于telphone实现于playgame了接口GameMaching 能够打游戏 实现于playgame了接口 二解决问题 1. …

网络基础:Ping命令的7种基础用法,掌握了秒变大神!

现在不管安防工程还是弱电工程&#xff0c;与网络的联系也越来越密切了&#xff0c;网络基础知识中的网络命令ping命令在项目中是使用频率最高的&#xff0c;一般我们用的都是它的基本功能&#xff0c;今天和大家来详细看下Ping命令的7个基础用法&#xff0c;掌握了秒变大神&am…

java枚举返回字符串_Java新特性:数据类型可以扔掉了?

关注“脚本之家”&#xff0c;与百万开发者在一起作者 | 王磊来源 | Java中文社群(ID&#xff1a;javacn666)在很久很久以前&#xff0c;我们写代码时要慎重的考虑变量的数据类型&#xff0c;比如下面这些&#xff1a;枚举&#xff1a;尽管在 JDK 5 中增加了枚举类型&#xff0…

idea查看类和方法的结构图

查看类的结构图 1.选中需要查看的类或者方法 2.点击右键选中【Diagrams】 效果如下,绿色的是接口,蓝色的是类