如何结合Box2d的身体?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何结合Box2d的身体?相关的知识,希望对你有一定的参考价值。
我有一个纹理,不仅仅是一个盒子或圆圈,我的身体需要与这个形状相同,所以我想要结合多个身体来达到我想要的形状,它甚至可能吗?或者有更好的方法来做到这一点?我正在使用带有libgdx框架的java。
身体的形状由Fixture实例定义。由于身体可以有多个固定装置,您可以根据需要组合多种形状。
要创建许多灯具,你可以多次调用createFixture方法与其他FixtureDef对象一样
FixtureDef fd1 = new FixtureDef();
FixtureDef fd2 = new FixtureDef();
...
fd1.shape = shape1;
fd2.shape = shape2;
...
body.createFixture(fd1);
body.createFixture(fd1);
虽然请注意Box2D通过提供ChainShape支持超过圆形和矩形,允许您创建任何您想要的形状
ChainShape weird = new ChainShape();
weird.createLoop( new float[]{vertice1x, vertice1y, vertice2x, ...});
加入机构有联合(看看here)机制,但我想这不是你想要的
是的,您可以按照以下步骤操作
有一个适合您工作的PolygonShape或ChainShape选项
第1步:定义一个正文。
BodyDef bd = new BodyDef();
Body body = box2d.world.createBody(bd);
第2步:定义形状。
ChainShape chain = new ChainShape();
第3步:配置形状。 ChainShape对象是一系列连接的顶点。要创建链,我们必须首先指定一个顶点数组(每个顶点作为Vec2对象)。要创建带顶点的链,然后将数组传递给一个名为的函数
createChain().Vec2[] vertices = new Vec2[2];
vertices[0] = box2d.coordPixelsToWorld(0,150);
vertices[1] = box2d.coordPixelsToWorld(width,150);
chain.createChain(vertices, vertices.length);
除非附着在身体上,否则Shape不是Box2D的一部分。即使它是一个固定的边界而且从不移动,它仍然必须附着。
FixtureDef fd = new FixtureDef();
fd.shape = chain; A fixture assigned to the ChainShape
fd.density = 1;
fd.friction = 0.3;
fd.restitution = 0.5;
body.createFixture(fd);
多边形形状
PolygonShape ps = new PolygonShape();
ps.setAsBox(box2dW, box2dH);
Vec2[] vertices = new Vec2[4];
vertices[0] = box2d.vectorPixelsToWorld(new Vec2(-15, 25));
vertices[1] = box2d.vectorPixelsToWorld(new Vec2(15, 0));
vertices[2] = box2d.vectorPixelsToWorld(new Vec2(20, -15));
vertices[3] = box2d.vectorPixelsToWorld(new Vec2(-10, -10));
PolygonShape ps = new PolygonShape();
ps.set(vertices, vertices.length);
官方试验示例
我强烈建议您查看GUI上的所有Testbed示例,直到找到您要查找的效果。
通过这样做,我能够找到以下示例:
- 如qazxsw poi所述,每个身体有多个固定装置: qazxsw poi qazxsw poi 这是迄今为止我见过的最好的方法。
- https://stackoverflow.com/a/35667538/895245:https://github.com/erincatto/Box2D/blob/f655c603ba9d83f07fc566d38d2654ba35739102/Box2D/Testbed/Tests/ShapeEditing.h#L61但是如果你的形状的一个边缘不是直线,它将无法工作,例如一个圆圈。
- https://github.com/erincatto/Box2D/blob/f655c603ba9d83f07fc566d38d2654ba35739102/Box2D/Testbed/Tests/CompoundShapes.h:
ChainShape
但是,这并不能使两个实体完全连接,如示例本身所示,以及Box2D手册: 使用焊接接头来定义易碎结构是很诱人的。但是,Box2D求解器是迭代的,所以关节有点软。因此,通过焊接接头连接的主体链将会弯曲 所以它更像是一个旋转关节,试图将两个物体留在给定的角度。
这些示例非常简单,并且随着Box2D的发展而得到支持。
以上是关于如何结合Box2d的身体?的主要内容,如果未能解决你的问题,请参考以下文章
HTML5之2D物理引擎 Box2D for javascript Games 系列 翻外篇--如何结合createJS应用box2d.js