Насколько мне известно, b2BoundaryListener был частью более ранних версий Box2D и был удален, поскольку мир Box2D больше не имеет границ.
Вы можете использовать динамические датчики, так как они также будут обнаруживать кинематические тела. Однако если в вашем мире используется гравитация, вам придется починить тела.
Вы можете сделать это, применив силу, противодействующую гравитации, или прикрепив эти тела динамических датчиков к статическим телам с помощью соединения (например, сварного соединения).
Более новые порты Box2D Javascript также включают метод setGravityScale, который позволит вам создавать динамические тела, на которые не влияет гравитация (например, JSBox2D)
Но я думаю, что делать это вручную в обновлении, вероятно, лучше, и это должно быть довольно просто, если вы используете класс b2AABB. Это удалит объекты, когда их ограничивающая рамка находится за пределами ваших границ.
Вы можете сделать что-то вроде следующего (непроверенный код):
var body = world.GetBodyList();
while (body != null) {
var fixture = body.GetFixtureList();
var bodyIsInBounds = false;
while (fixture != null) {
// bounds AABB are your boundaries (as b2AABB object)
if (fixture.GetAABB().TestOverlap(boundsAABB)) {
bodyIsInBounds = true;
break;
}
fixture = fixture.GetNext();
}
if (!bodyIsInBounds) {
world.DestroyBody(body);
}
body = body.GetNext();
}
Возможно, вам также придется проверить наличие b2AABB.Contains. Я не уверен, вернет ли TestOverlap значение true, если boundsAABB полностью содержит другой объект b2AABB.
person
Dennis Korbar
schedule
14.05.2014