box2dを使用してチェーン形状を作成しようとしています。
チェーン シェイプまたはポリゴン シェイプを作成するには、ジオメトリを指定するためにベクトルの配列を渡す必要があります。
これを達成するのに役立つドキュメントはありません。また、ここでのバインドに関するメモでは、配列の詳細については触れていません。
配列を作成するにはどうすればよいですか?
box2dを使用してチェーン形状を作成しようとしています。
チェーン シェイプまたはポリゴン シェイプを作成するには、ジオメトリを指定するためにベクトルの配列を渡す必要があります。
これを達成するのに役立つドキュメントはありません。また、ここでのバインドに関するメモでは、配列の詳細については触れていません。
配列を作成するにはどうすればよいですか?
これらの (まだ文書化されていない) emscripten 機能を使用して、この問題を解決しました。
関数と値 (ALLOC_STACK
と などwrapPointer
) に Box2D オブジェクトからアクセスしていることに注意してください。これは、それらが公開されていることを発見したスコープだからです。これらは emscripten 固有の値であるため、プロジェクトやビルド設定が異なると異なります。
// an alternative method that may work (shorter, less obvious code) is
// allocate([v1x,0,0,0,v1y,0,0,0,v2x,0,0,0,...], 'float', Box2D.ALLOC_STACK);
// 8 byte per vector * 4 vectors = 32 bytes of memory required
var buffer = Box2D.allocate(32, 'float', Box2D.ALLOC_STACK);
Box2D.setValue(buffer, left, 'float'); // v1x
Box2D.setValue(buffer+4, bottom, 'float'); // v1y
Box2D.setValue(buffer+8, right, 'float'); // v2x
Box2D.setValue(buffer+12, bottom, 'float'); // v2y
Box2D.setValue(buffer+16, right, 'float'); // v3x
Box2D.setValue(buffer+20, top, 'float'); // v3y
Box2D.setValue(buffer+24, left, 'float'); // v4x
Box2D.setValue(buffer+28, top, 'float'); // v4y
var ptr_wrapped = Box2D.wrapPointer(buffer, Box2D.b2Vec2);
shape.CreateLoop(ptr_wrapped, 4);
body.CreateFixture(shape,0.0);