我正在为我的游戏开发一个导入器,它会读取一个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'
我该如何解决这个问题?我试着把它变成一个常数,但这也不起作用(因为我需要它是动态的,所以没有帮助我。)
答案 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);
它工作得很好:)。