Я делаю Flash-игру и столкнулся с очень странной проблемой при попытке нарисовать многоугольник в Box2D.
Вот код, который я использую:
var fixtureDefs:Array = new Array();
...
var fDef:b2FixtureDef = new b2FixtureDef();
fDef.density = 0;
fDef.shape = new b2PolygonShape();
b2PolygonShape(fDef.shape).SetAsArray(vertexArray);
fixtureDefs.push(fDef);
//This gets repeated several times, so that at the end you get a body consisting of several convex shapes.
...
var bD:b2BodyDef = new b2BodyDef();
bD.type = b2Body.b2_staticBody;
bD.position.Set(300/Constants.RATIO,200/Constants.RATIO);
var body:b2Body = Constants.world.CreateBody(bD);
...
for each(var fD:b2FixtureDef in fixtureDefs) {
body.CreateFixture(fD);
}
Где vertexArray — допустимый массив, содержащий 4 вершины b2Vec2, составляющих выпуклую форму.
Проблема в том, что когда я тестирую, коллизии не работают для этого тела. Большинство других объектов — враги, управляемые пользователем персонажи — проходят насквозь, как будто тела вообще нет. Некоторые рейкасты также проходят.
Как ни странно, один тип тел, которые у меня есть (собственный враг), каким-то образом обнаруживает тело и сталкивается с ним. Рейкасты, которые делают попытки врагов, работают — когда ваш персонаж прячется за полигоном, они как будто его не видят.
Другая странная вещь: когда я пробую тот же код, только использую SetAsBox вместо SetAsArray, он работает именно так, как должен.
Я использую собственный класс ContactListener, но я не выполнял никакой фильтрации контактов (если только это невозможно сделать, не осознавая этого).
Я использую версию Box2D 2.1a для Flash 9.
Какие-либо предложения? Я упускаю что-то очевидное или я (не дай Бог!) обнаружил ошибку? Спасибо за вашу помощь!
Андрей