0

我正在尝试定义一个由物理世界界定的身体更新的多边形。这是我的尝试:

public Body _body;
public Shape _shape;
_primitiveBatch = new PrimitiveBatch(_game.GraphicsDevice);
_shape = new PolygonShape(_vertices, 1);
Vector2 _position = FarseerPolygon.getCenter(((PolygonShape)_shape).Vertices);
_body = new Body(_world);
_body.Position = _position;
_body.CreateFixture(_shape);
_body.BodyType = BodyType.Dynamic;
_body.Restitution = 0.9f;
_body.Friction = 1f;

身体改变了它的位置,但不改变形状。Body.CreatePolygon 也不起作用。任何帮助将不胜感激,因为我被困在这里......谢谢,

4

1 回答 1

2

多边形不应该改变位置。这是一个性能问题。Fixture及其被设计为存在于“Shape模型空间”(接近(0,0))中并且不会改变。然后Body定义变换以将该形状放置在“世界空间”中。

要在世界空间中获取多边形的各个点,给定 a Fixture fixture,请执行以下操作:

var shape = fixture.Shape as PolygonShape;
Transform transform;
fixture.Body.GetTransform(out transform);

foreach(Vector2 vertex in shape.Vertices)
{
    Vector2 theTransformedVertex = MathUtils.Multiply(ref transform, vertex);
}

您需要 Farseer 的这些用法,才能使上述代码正常工作:

using FarseerPhysics.Collision.Shapes;
using FarseerPhysics.Common;

(此代码针对 Farseer 3.3.1 编写)

于 2013-01-15T02:36:11.020 回答