PolygonShape未经其正文更新

时间:2013-01-14 17:53:44

标签: c# .net xna-4.0 farseer

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

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也不起作用。我真的很感激任何帮助,因为我被困在这里......谢谢你,

1 个答案:

答案 0 :(得分:2)

多边形不应该改变位置。这是表演的事情。 Fixture及其Shape旨在存在于“模型空间”(接近(0,0))而不会更改。然后Body定义变换以将该形状放置在“世界空间”中。

要获得世界空间中多边形的各个点,给定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编写)