我从这里使用 Box2D 的 emscripten 端口:https ://github.com/kripken/box2d.js
它工作得很好,但我在与 emscripten 交互时遇到了一些麻烦。
具体来说,我在这样的循环中执行模型显示同步:
function step() {
world.Step(1/60);
var body = this.world.GetBodyList();
while(body != null) {
readGeometry(body, body.data);
body = body.GetNext();
}
}
...但这似乎不起作用。尽管 C++ 代码在 body 对象的链表末尾返回 NULL,但 body.GetNext()(cpp 中的返回类型为 b2Body *)绝不是原生 javascript null。
我也试过:
body != Box2D.NULL
然而,这也不是真的。我猜 emscripten 正在返回一个包装的指针,我必须对其进行一些特定的操作来测试“nullness”。
检查返回的对象,我可以看到其中的空值的“指针”值为零,我可以使它与:
function step() {
world.Step(1/60);
var body = this.world.GetBodyList();
while(body.a != 0) { // <--------------- This hack
readGeometry(body, body.data);
body = body.GetNext();
}
}
因此,显然可以测试 NULL 性,但我找不到任何有关如何执行此操作的文档。