我正在使用box2d并尝试创建链形。
为了创建链形状或多边形形状,我必须传递一个向量数组以指定几何形状。
我没有看到任何文档可以帮助我完成此操作,并且此处有关绑定的说明也没有涉及有关数组的任何细节。
如何构造数组?
我已经通过使用这些(尚未记录的)emscripten 功能解决了这个问题。
请注意,我从 Box2D 对象中访问函数和值(如ALLOC_STACK
和wrapPointer
)只是因为这是我发现它们被公开的范围。它们是特定于 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);