2014-02-06 6 views
6

Мне нужно создать тело с более чем 8 вершинами, и я получаю ошибку.LibGDX BOX2D change maxPolygonVertices

AL lib: (EE) alc_cleanup: 1 device not closed 
Assertion failed! 

Program: C:\Program Files\Java\jre7\bin\javaw.exe 
File: /var/lib/jenkins/workspace/libgdx/gdx/jni/Box2D/Collision/Shapes/b2PolygonShape.cpp, Line 122 

Expression: 3 <= count && count <= 8 

Как я могу изменить эту константу?

Я нашел этот файл https://github.com/libgdx/libgdx/blob/master/gdx/jni/Box2D/Common/b2Settings.h

Здесь я увидел

#define b2_maxPolygonVertices 8 

Как я могу изменить его от libGDX?

ответ

7

На самом деле вы не должны изменять это, так как это снизит производительность.

Вместо этого вы должны создать Body с несколькими Fixtures. Эти светильники будут иметь максимум 8 вершин и будут разделять некоторые из вершин, поэтому вы будете имитировать большую фигуру, используя более мелкие части, которые склеиваются.

Это называется разложением многоугольника. Некоторые редакторы Box2D делают это автоматически для вас, когда вы экспортируете свою сцену. Вероятно, лучший редактор для Box2D - R.U.B.E.. Существует также загрузчик libgdx для сцен rube here.

Если вы создадите их программно, вам, вероятно, придется сделать это самостоятельно. Возможно, некоторые инструменты LibGDX, такие как EarClippingTriangulator, могут помочь вам здесь.

+0

Итак, давайте скажем, что у меня есть массив с поплавком вершин, который имеет более 8 точек, как я могу использовать трюк с ушной связью? –

+0

Мой код http://pastebin.com/L7wjqHbt. Как мне его использовать? –

+0

Он триангулирует ваш многоугольник. Массив, который вы получаете, представляет собой массив с индексами треугольников. Вы бы взяли по 3 штуки и построили новое устройство. Это означает, что 'array [sa.get (0)]', 'array [sa.get (1)]', 'array [sa.get (2)]' будут вершинами, которые вы использовали бы для одного из новых тринагулярных светильники. – noone