标签:physics-body-editor box2d 不规则body
继续我们的问题,如果遇到不规则的图形怎么办?难不成要一个个组装吗?
这里就要提一个叫做“关节”的名词了,它可以将一个个部分进行组装成自己的形状,特别是各部件独自运转时,比如一辆自行车,它的轮子和车身都是各自运转的。
但是网上相关的资料真是太少了!一大堆复制粘贴的,全是废话,不知道大家是怎么感觉的?但是我的这个游戏没用到,所以没有深究,有兴趣的可以去谷歌一下。
下面我介绍的是一个非常非常方便的工具,它的名字叫做physics-body-editor,那么它是干什么的呢?恩,它可以根据你的图片创造你想要形状(凸多边形)的body!比如你有一张杯子的图片,你想要得到一个和它一样形状的body,那么你就可以使用physics-body-editor!
这是它的官网http://www.aurelienribon.com/blog/projects/physics-body-editor/,(需要越狱,建议使用自由门软件越狱)
这是一名美国大牛业余时间写的,不得不说外国人真的很用心,相比之下,国内就显得特别浮躁。很少有几个用心写博客,写评论的,对自己写的也很不负责。
那么我先介绍一篇国内也是唯一一篇介绍这个工具的博客(我是第二个,咳咳……)
http://www.huangyunkun.com/2012/08/29/libgdx_24/
我看到了好多一模一样的,好像这个才是原创,哎,就算借鉴也不用一模一样吧,整的跟自己用过似得。读完他这篇博客我发现学到的还没有官网上多。。。而且我还是没明白怎么使用,官网上并没有相关的完整下载包。。。
好了,我就先给大家翻译一下官网上的内容:
物理身体编辑器是所有关于你的生活与物理引擎更容易。具体地说,它的目标,你的游戏物体的碰撞创造形态:我们称之为刚体。它也可以让你把这些对象在一起并与接头连接创建复杂的对象:我们称之为动态对象。
我们要解决的问题是:对在图像看,我想创造一瓶可以保持对象里面。首先,我用绘图工具绘制图像的形状在瓶我点,我报告的值在我的游戏。对于每一个点,我不得不从像素单元转换为当然世界单位。无聊的。哦,你猜怎么着?它不工作!事实上,物理引擎通常只与凸多边形!在分解为多个凸多边形的形状,用手……多无聊。当然,每一次我想做一个小小的变化,我不得不去同一过程。
The latest version of the application can be downloaded from its project page. As it is written in Java, it should be working under Windows, MacOS and most Linux distributions.
Project repository:
http://code.google.com/p/box2d-editor/Download page (application, loaders and demos):
http://code.google.com/p/box2d-editor/downloads/list
The application uses the following technologies:
Here is a video tutorial to get you quicky up and running. It shows how to create a project, how to add a new body, and how to define its collision shape. The video quality is not awesome at all (sorry about that), so don’t look at it to appreciate the user experience of the application but only to learn the basic commands.
[youtube=http://www.youtube.com/watch?v=KASY91EiTXQ]
有两种形状:可以被创建和界定。在创建一个多边形的形状,你要做的是创建和启用的模式,点击任何地方在屏幕上。点击Add将每个点的多边形,和当你想关闭它,只要点击在第一点。在创建一个圆,你需要按住Ctrl键或C,然后点击一次来设置在中心的形状,第二次定义了它的半径。
Several keyboard shortcuts exist to make your life easier:
该工具支持自动跟踪功能可以帮助您在许多场合练习一点。自动跟踪算法通常远比你的手不太精确,但少数的细化步骤,您可以创建复杂的形状,很快。
在物理身体的编辑器,您定义的每个图像的身体,这个身体是由多个灯具。夹具是基本形状(多边形或圆形)的一些相关的参数,如密度和摩擦。体位于世界上一个点,称为参考点。其夹具放置在参考点。请注意,这个参考点无关,其质量中心。事实上,你身体的旋转点是它的质量中心。基准点的物理模拟没有影响。它仅仅是一个方便的点到你身体的位置相对于这个参考点。这是它的物理引擎的理论。
注意:下面的代码片段从装载机都演示项目提取。他们是写在Java,和目标都游戏框架。然而,他们应该很容易理解,并易于移植到其他语言。
第一步是容易的,所提供的装载机为你做一切事情。请注意,在7行的位置对应的世界,身体的位置的参考点。在这里我们将它在世界坐标(0,0)。
privatevoid createBottle() { // 0. Create a loader for the file saved from the editor. BodyEditorLoader loader = newBodyEditorLoader(Gdx.files.internal("data/test.json")); // 1. Create a BodyDef, as usual. BodyDef bd = newBodyDef(); bd.position.set(0,0); bd.type = BodyType.DynamicBody; // 2. Create a FixtureDef, as usual. FixtureDef fd = newFixtureDef(); fd.density = 1; fd.friction = 0.5f; fd.restitution = 0.3f; // 3. Create a Body, as usual. bottleModel = world.createBody(bd); // 4. Create the body fixture automatically by using the loader. loader.attachFixture(bottleModel,"test01", fd, BOTTLE_WIDTH); }
现在,我们有我们的模型完全建立,我们要在它的位置画出相应的图像。都把图像与参考他们的左下角。因此,如果你离开参考点在左下角的你的身体,你可以直接把图像的参考点的位置(用getposition()方法Box2D引擎返回)。否则,如果你改变参考点的位置,你需要考虑绘制图像。
因此,你需要存储供以后使用的参考点:
bottleModelOrigin = loader.getOrigin("test01", BOTTLE_WIDTH).cpy();
最后,在你的渲染方法,你可以参考点的位置绘制图像,它的局部坐标系偏移相对于图像的左下角:
publicvoidrender() { Vector2 bottlePos = bottleModel.getPosition().sub(bottleModelOrigin); bottleSprite.setPosition(bottlePos.x, bottlePos.y); bottleSprite.setOrigin(bottleModelOrigin.x, bottleModelOrigin.y); bottleSprite.setRotation(bottleModel.getAngle() * MathUtils.radiansToDegrees); ... }
That’s all, you should now be up and running!
Libgdx Box2D实战---放开那小球(四:不规则body创建--physics-body-editor的使用)
标签:physics-body-editor box2d 不规则body
原文地址:http://blog.csdn.net/google_acmer/article/details/41127079