У меня есть тело с одним креплением, прикрепленным к нему. Форма, прикрепленная к светильнику, представляет собой PolygonShape. Для рендеринга тела мне нужен доступ к его координатам вершин.
Вот что я пробовал:
Vector2 tmpVector = new Vector2();
Fixture f = body.getFixtureList().get(0);
PolygonShape shape = (PolygonShape)f.getShape();
shape.getVertex(3, tmpVector);
shape.getVertex(2, tmpVector);
shape.getVertex(1, tmpVector);
shape.getVertex(0, tmpVector);
Он работает, когда тело не контактирует с другими телами.
Проблема в том, что когда тело сталкивается с другим телом, getFixtureList
возвращает более одного инструмента, и это включает в себя те, что из других тел.
Как решить эту проблему?
Все, что мне нужно, это получить доступ к положениям вершин тела многоугольника на лету.
Вы можете проверить, совпадает ли body
прибора с body
с getBody()
:
Vector2 tmpVector = new Vector2();
Fixture f = body.getFixtureList().get(0);
while (f.getBody() != body)
{
f = f.getNext();
}
if (f != null)
{
PolygonShape shape = (PolygonShape)f.getShape();
// get vertices
}
Конечно, эта работа, только если вы знаете, что body
имеет ровно одно крепление с формой многоугольника, как говорится в вопросе. В противном случае вы можете использовать атрибут userData
для хранения информации о различных светильниках.
getFIxtureList
никогда не возвращает приспособление, которое не прикреплено к телу. Я знаю, что этот кусок кода может выглядеть как трюк, но он работает, и если то, что вы говорите, правда, я думаю, что это два единственных способа получить правильное приспособление.