javascript - Emscripten 绑定(bind) : How to create an accessible C/C++ array from Javascript?

标签 javascript arrays box2d typed-arrays emscripten

我正在使用box2d并尝试创建一个链条形状。

为了创建链形状或多边形形状,我必须传递向量数组才能指定几何形状。

我没有看到任何文档可以帮助我完成此操作,以及有关绑定(bind)的注释 here不要深入讨论数组的任何细节。

如何构造一个数组?

最佳答案

我已经通过使用这些(尚未记录的)emscripten 功能解决了这个问题。

请注意,我正在访问 Box2D 对象之外的函数和值(例如 ALLOC_STACKwrapPointer),只是因为这是我发现它们的范围裸露。它们是 emscripten 特定的值,因此对于不同的项目和/或build设置,它会有所不同。

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

关于javascript - Emscripten 绑定(bind) : How to create an accessible C/C++ array from Javascript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12792486/

相关文章:

将字符串数组复制到 C 中的另一个数组中

java - 数组作为参数

C++:跟踪对数组元素的访问

java - 如何使 box2dlights 中的对象不受光线影响?

javascript - SystemJS 无法正确加载 RxJS

javascript - Jquery 仅附加到第一类元素

c# - Box2D body 速度上限?

iphone - cocos2d中如何设置动画的帧

javascript - polymer -使用行为在元素之间共享对象?

javascript - 使用 selectAll() 到达特定类