Box2d - массив переменной длины не-POD типа элемента 'b2Vec2' - PullRequest
7 голосов
/ 26 июля 2011

Я работаю над импортером для моей игры, он читает xml и затем создает тела box2d для всего.

Например

  <polygon vertexCount="3" density="0" friction="0.25" restitution="0.30000000000000004">
      <vertice x="6.506500000000001" y="0.4345"/>
      <vertice x="6.534970527648927" y="0.48385302734375"/>
      <vertice x="6.478029472351075" y="0.48385302734375"/>
  </polygon>

Проблема в экспортере. Теперь я сталкиваюсь с частью многоугольника, мне нужно настроить массив b2vec2, прежде чем добавлять вершины и устанавливать их позиции.

int count = [[childnode attributeForName:@"vertexCount"] intValue];
b2Vec2 points[count];

но box2d хочет, чтобы точки [5] были фактическим литеральным числом (например, точки [5] вместо переменной points [число], ошибка, которую она выдает, когда у меня есть переменная count:

 Variable length array of non-POD element type 'b2Vec2'

Как мне решить это? Я пытался сделать его константой, но это тоже не работает (и не помогает мне, потому что мне нужно, чтобы оно было динамичным).

Ответы [ 2 ]

19 голосов
/ 26 июля 2011

Вы должны создать массив в куче:

b2Vec2 *array = new b2Vec2[count];

Не забудьте удалить массив вручную после завершения.

или лучше использовать std :: vector:

a)
std::vector<b2Vec2> vertices(count);
vertices[0].set(2, 3);
vertices[1].set(3, 4);
...

b)
std::vector<b2Vec2> vertices;
vertices.push_back(b2Vec2(2, 3));
vertices.push_back(b2Vec2(3, 4));
0 голосов
/ 27 июля 2011

Выбрал более простой маршрут и получил доступ к не допускается к Vars:

polygonShape.m_vertexCount = count;

и затем установите их в forloop:

polygonShape.m_vertices[c].Set(x,y);

отлично работает:)

...