为满足项目需求,我用java写了一个生成Box2D b2PolygonShape多边形顶点的工具。
也是一步一步完成的,首先是为1个不规则的sprite图片生成多边形shape轮廓,后来发现如果用Box2D里面的compound概念的话
可以生成比较完美的不规则图片 shape 轮廓,因此,工具升级到1.1,从此支持对不规则的sprite图片进行描点
1.1版完成的时候逛了逛子龙山人的博客,发现ray的教程里面有介绍1个多边形描点工具
是源自Johannes Fahrenkrug的VertexHelper,下下来在xcode里面跑了下,
发现还不错,
不过让我比较不解的是:生成的竟然是
box2d 以及 chipmunk 引擎的程序代码片段
这个我感觉不是很好,灵活性不够!不过这都是后话了,其实我对自己写的描点工具还是算比较满意的~
下面给个VertexHelper的图:
下面是VertextHelper的用例图,相信还是很容易就能看出怎么使用这个工具的,如果你用过Box2D的话~
以下是我做的工具的几张截图:
这个工具的设计思路还是比较简单的:
①将复杂的图形分割成多个凸多边形(Box2D只支持凸多边形,而且最大8个顶点,如果要超过8个顶点,请修改b2Settings.h头文件)
②这张图片我进行了倒置变换,这样可以减少一些坐标变换的工作,不过也带来了一些不好的影响,用到了一个类结果导致打不成Jar包了
③鉴于对JFrame边框以及Javaswing空间尺寸打不准,因此程序界面尽量简洁免除不必要的工作量,功能输入由快捷键代劳
比如,可以动态更改所描点的尺寸([]),以及子多边形外围矩形包围框的宽度(<>)
④避免输入不合乎条件的点,我对整个图片加了一个矩形包围框,点在这个矩形包围框外部的点将无效
⑤输入难免会出现差错,而且一个复杂图形必定要点出很多个子凸多边形才能完全覆盖,这样的话,出现错误时的挽救就是个问题
我采用了这样的思路:动画sprite图片最多不超过512*512的尺寸,那么,对付这么一些小个子图片的话
适当的采用高清4倍版的图片进行描点必会带来很好的用户体验,这样的话,就不用因为图片实在是太小点不准而做重复的工作了~
其实在第1版仅仅为1整张图片描出一个多边形的时候,我加入了撤销的操作,但是1.1版因为加入了复合多边形的概念
一张图片将会由多个子凸多边形来覆盖,撤销操作难免要考虑到不少的情形,我直接屏蔽之了,其实我是个懒人~
对于bird1_animi0×0.5.png这张图片
下面是生成的数据文件格式:
数据格式很简单,也很容易进行解析:
①采用了键值对的方式,可以通过以=分割成字符串数组,很容易的将一个个的sprite的形状数据添加到NSMutableDictionary里面去;
②多个形状图片之间以\n换行符进行分隔(windows用\r\n换行,linux,mac,java仅以\n换行),多个子凸多边形之间以星号进行分隔,
单个子凸多边形的各个顶点之间以逗号进行分隔,单个顶点的横纵坐标之间以横线进行分隔~
接下来是解析和使用该数据格式的相关代码:
①初步解析数据以字典的形式保存起来(该字典对象是一个单例,初步解析后保存的数据可以在整个程序的范围内被访问到)~
②具体的数据解析代码:
抹了,贴几张游戏的图片
①单个凸多边形版的:
②多个子凸多边形版的:
分享到:
相关推荐
简单的box2D编程!快写c++代码软件
box2d Java box2d引擎Java
Box2D 中文手册,非常详细的Box2D文档,入门绝佳
Box2d简介 Box2d简介 Box2d简介 Box2d简介
Box2d同时也提供了各种语言环境的实现,由于Ophone平台使用JAVA作为变成语言,所以我们将选择使用Box2d的java版JBox2d,这也将产生一个问题,JBox2D是用processing库来处理图像显示,所以Ophone平台上则不适用,在...
Box2D物理引擎源码及中文文档;...android可以直接使用java版本的Jbox2d,但因为Jbox2d的图形渲染是使用processing库来实现的,所以,在android中使用Jbox2d的时候,图形渲染的工作就只能自己来写了。
高清带目录《Box2D物理游戏编程初学者指南》系统地梳理学习Box2D物理游戏编程的各个知识点,并通过图解、问答、举例等形式深入浅出地讲解初学者觉得晦涩难懂的概念、术语。 《Box2D物理游戏编程初学者指南》最后,...
Box2D 是用可移植的 C++ 来写成的。引擎中定义的大部分类型都有 b2 前缀,希望这能消除它和你 游戏引擎之间的名字冲突。 1.2 必备条件 在此,我假定你已经熟悉了基本的物理学概念,例如质量,力,扭矩和冲量。如果...
Box2D 是一个用于游戏的 2D 刚体仿真库。程序员可以在他们的游戏里使用它,它可以使物体的运动 更加可信,让世界看起来更具交互性。从游戏的视角来看,物理引擎就是一个程序性动画 (procedural animation)的系统,而不是...
box2d中文手册,开发IOS游戏必备。 Box2D 是一个用于游戏的 2D 刚体仿真库。...Box2D 是用可移植的 C++ 来写成的。引擎中定义的大部分类型都有 b2 前缀,希望这能消除它和你 游戏引擎之间的名字冲突。
Box2D.go - 是Box2D的一个Go移植,一个用C 编写的游戏2D物理引擎
box2d android java api 文档
Box2D_v2.1.2 Box2D is a 2D physics engine for games. For help with Box2D, please visit http://www.box2d.org. There is a forum there where you may post your questions.
例子的绘图部分使用了我的另一个作品OpenGL Canvas,不需要另外下载。例子可以直接编译,无控件安装。 希望各位Delphi fans能用这个引擎做出更多有意思的游戏。 个人空间 http://hi.baidu.com/wqyfavor,里面还有很...
Box2D中文手册.Box2D是一个用于游戏的2D刚体仿真库。程序员可以使用它, 让游戏中的物体运动起来更真实, 让游戏世界更具交互性。以游戏的角度来看,物理引擎就是一个程序性动画的系统。
一个libgdx下box2d的使用实例 包括box2d刚体创建,碰撞已经刚体和texture的绑定
box2d 2.3.1 下载