Box2D: форма ребра и форма цепи используют разные координаты для вершин

Я создаю тело с множеством вершин, чтобы оно сталкивалось с другими телами в сцене. Это делается с помощью b2ChainShape, но я сначала попытался создать одно ребро этой цепочки (v2v — метод преобразования координат):

b2Vec2 v1 = [U v2v:CGPointMake(0, 150)];
b2Vec2 v2 = [U v2v:CGPointMake(50, 150)];

b2EdgeShape shape;
shape.Set(v1, v2);

Это работает, как и ожидалось: другие тела сталкиваются с этим краем. Как ни странно, при использовании одних и тех же вершин для формы цепи коллизии нет:

b2Vec2 vertices[2];
vertices[0] = [U v2v:CGPointMake(0, 150)];
vertices[1] = [U v2v:CGPointMake(50, 150)];

b2ChainShape shape;
shape.CreateChain(vertices, 2);

Есть идеи, почему? Цепи используют какую-то другую систему координат?


person Sergey Mikhanov    schedule 27.05.2012    source источник
comment
Это странно. Внутри форма цепи просто управляет набором форм ребер, поэтому здесь не должно быть никакой разницы. Нет ли в вашем коде чего-то еще, что могло бы иметь значение?   -  person iforce2d    schedule 28.05.2012


Ответы (1)


Пожалуйста, прочитайте следующий абзац, который я беру из руководства Box2d. http://www.box2d.org/manual.pdf

Формы краев представляют собой сегменты линий. Они предназначены для помощи в создании статической среды свободной формы для вашей игры. Основным ограничением форм ребер является то, что они могут сталкиваться с кругами и многоугольниками, но не с самими собой. Алгоритмы столкновений, используемые Box2D, требуют, чтобы по крайней мере одна из двух сталкивающихся фигур имела объем. Формы краев не имеют объема, поэтому столкновение краев невозможно.

person Po-an Shen    schedule 03.08.2012