Я делаю 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 *. 1018 *
Есть предложения? Я что-то упускаю из виду или я (не дай Бог!) Обнаружил ошибку? Спасибо за вашу помощь!
Андрей