2011-07-26 10 views
7

私は、私のゲームのために輸入業者に働いています。それはxmlを読み込み、すべてのbox2dボディを作成します。Box2d - 非POD要素型の可変長配列 'b2Vec2'

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

しかしポイントは、[5]ポイントのような実際のリテラル数(代わりに可変ポイント[番号] [5]、私はそこに変数countを持っている場合、それが出力するエラーであることがBOX2Dたいです。

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

どのように私はそれが一定で作ってみましたが、それはどちらか動作しない(と私はそれを動的にする必要があるので、私を助けていません)?この問題を解決します。

答えて

-3

が簡単にルートを取り、VARSに仮定していないアクセス:

polygonShape.m_vertexCount = count; 

をして、forloopでそれらを設定します。

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

それは完璧に機能しています:)

+0

その後、私は.Set(m_vertices、m_vertexCount);さもなければ、物理学自体がspazz outするでしょう。 – M0rph3v5

+0

あなたが既存のエラーをどのように置き換えているかは不明です。前後のコードをもっと提供できますか? – fuzz

19

あなたは作成する必要がありますヒープ上の配列:

b2Vec2 *array = new b2Vec2[count]; 

完了したら、アレイを手動で削除することを忘れないでください。

またはより良い使用のstd ::ベクトル :

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

が動作していないようですが、b2PolygonShape.cppでクラッシュします。私がやったのは、手動で.m_vertexCountを設定してから、.m_verticles [i] .Set(x、y)でそれらを設定するだけでした。 – M0rph3v5

+0

が正確には、失敗しました: b2Assert(edge.LengthSquared()> b2_epsilon * b2_epsilon); – M0rph3v5

+0

ポリゴンの2つの頂点を正確に同じ場所に置いていないことを確認してください – iforce2d