Box2d - 非POD元素类型'b2Vec2'的可变长度数组

时间:2011-07-26 11:12:09

标签: objective-c arrays box2d polygon pod

我正在为我的游戏开发一个导入器,它会读取一个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]而不是变量点[数字],当我有变量计数时输出的错误是:

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

我该如何解决这个问题?我试着把它变成一个常数,但这也不起作用(因为我需要它是动态的,所以没有帮助我。)

2 个答案:

答案 0 :(得分:19)

您必须在堆上创建数组:

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));

答案 1 :(得分:-3)

采取更简单的路线,并访问不假设为vars:

polygonShape.m_vertexCount = count;

然后在forloop中设置它们:

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

它工作得很好:)。