`
xumingrencai
  • 浏览: 1181399 次
文章分类
社区版块
存档分类
最新评论

用Java写的一个 Box2D b2PolygonShape描点工具

 
阅读更多

为满足项目需求,我用java写了一个生成Box2D b2PolygonShape多边形顶点的工具。

也是一步一步完成的,首先是为1个不规则的sprite图片生成多边形shape轮廓,后来发现如果用Box2D里面的compound概念的话

可以生成比较完美的不规则图片 shape 轮廓,因此,工具升级到1.1,从此支持对不规则的sprite图片进行描点

1.1版完成的时候逛了逛子龙山人的博客,发现ray的教程里面有介绍1个多边形描点工具

是源自Johannes FahrenkrugVertexHelper,下下来在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_02_碰撞_box2D安卓快写代码_box2D_box2d碰撞_

    简单的box2D编程!快写c++代码软件

    box2d Java

    box2d Java box2d引擎Java

    Box2D 中文手册

    Box2D 中文手册,非常详细的Box2D文档,入门绝佳

    Box2d简介Box2d简介

    Box2d简介 Box2d简介 Box2d简介 Box2d简介

    box2d中文教程

     Box2d同时也提供了各种语言环境的实现,由于Ophone平台使用JAVA作为变成语言,所以我们将选择使用Box2d的java版JBox2d,这也将产生一个问题,JBox2D是用processing库来处理图像显示,所以Ophone平台上则不适用,在...

    Box 2D 物理引擎

    Box2D物理引擎源码及中文文档;...android可以直接使用java版本的Jbox2d,但因为Jbox2d的图形渲染是使用processing库来实现的,所以,在android中使用Jbox2d的时候,图形渲染的工作就只能自己来写了。

    BOX2D 物理游戏编程初学者指南 陈文登(高清,带目录)

    高清带目录《Box2D物理游戏编程初学者指南》系统地梳理学习Box2D物理游戏编程的各个知识点,并通过图解、问答、举例等形式深入浅出地讲解初学者觉得晦涩难懂的概念、术语。  《Box2D物理游戏编程初学者指南》最后,...

    box2d-as3版 中文教程

    Box2D 是用可移植的 C++ 来写成的。引擎中定义的大部分类型都有 b2 前缀,希望这能消除它和你 游戏引擎之间的名字冲突。 1.2 必备条件 在此,我假定你已经熟悉了基本的物理学概念,例如质量,力,扭矩和冲量。如果...

    box2d_manual_cn.pdf

    Box2D 是一个用于游戏的 2D 刚体仿真库。程序员可以在他们的游戏里使用它,它可以使物体的运动 更加可信,让世界看起来更具交互性。从游戏的视角来看,物理引擎就是一个程序性动画 (procedural animation)的系统,而不是...

    box2d中文手册

    box2d中文手册,开发IOS游戏必备。 Box2D 是一个用于游戏的 2D 刚体仿真库。...Box2D 是用可移植的 C++ 来写成的。引擎中定义的大部分类型都有 b2 前缀,希望这能消除它和你 游戏引擎之间的名字冲突。

    Go-Box2D.go-是Box2D的一个Go移植

    Box2D.go - 是Box2D的一个Go移植,一个用C 编写的游戏2D物理引擎

    Box2D中文版API

    box2d android java api 文档

    Box2D_v2.1.2

    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.

    box2D Delphi Package 2.1.3

    例子的绘图部分使用了我的另一个作品OpenGL Canvas,不需要另外下载。例子可以直接编译,无控件安装。 希望各位Delphi fans能用这个引擎做出更多有意思的游戏。 个人空间 http://hi.baidu.com/wqyfavor,里面还有很...

    Box2D中文手册

    Box2D中文手册.Box2D是一个用于游戏的2D刚体仿真库。程序员可以使用它, 让游戏中的物体运动起来更真实, 让游戏世界更具交互性。以游戏的角度来看,物理引擎就是一个程序性动画的系统。

    一个libgdx下box2d的使用实例

    一个libgdx下box2d的使用实例 包括box2d刚体创建,碰撞已经刚体和texture的绑定

    box2d 2.3.1

    box2d 2.3.1 下载

Global site tag (gtag.js) - Google Analytics