Добавление второго прибора в качестве датчика к корпусу в Box2Dweb

У меня две проблемы с добавлением сенсора в следующем коде. Вектор репозиции b2Vec2(0,50) не работает; второе приспособление все еще центрировано в начале тела. Оба прибора можно увидеть в режиме отладки, но я не могу переместить прибор к основанию основного прибора.

Во-вторых, когда isSensor является true Я не получаю PostSolve События. Когда он установлен в false Я получаю соответствующие события (вместе со столкновением). Как мне сделать этот датчик, который не будет сталкиваться с другими телами, но все же будет вызывать события. Спасибо за помощь.

    // FIXTURE DEF
    var fixDef = new box2d.b2FixtureDef();
    fixDef.shape = new box2d.b2PolygonShape;
    fixDef.shape.SetAsBox((25 / 2 / SCALE), (46 / 2 / SCALE));
    fixDef.density = 0.99;
    fixDef.friction = 0.39;
    fixDef.restitution = 0.0;
    fixDef.userData = "SBody";
    fixDef.filter.categoryBits = CAT.SOLDIER;
    fixDef.filter.maskBits = CAT.GROUND;
    this.view.body.CreateFixture(fixDef);


    // ADD FOOT SENSOR
    fixDef.density = 0.1;
    fixDef.friction = 1.;
    fixDef.restitution = 0.1;
    fixDef.userData = "Foot";
    fixDef.shape.SetAsBox((10 / 2 / SCALE), (100 / 2 / SCALE), new box2d.b2Vec2(0,50), 0);
    fixDef.isSensor = true;
    fixDef.filter.categoryBits = CAT.SOLDIER_FOOT_SENSOR;
    fixDef.filter.maskBits = CAT.SHIP | CAT.GROUND;
    this.view.body.CreateFixture(fixDef);

1 ответ

Решение

В этом ответе я использовал подсказку /questions/11341167/box2d-neskolko-priborov-i-pozitsionirovaniya/11341174#11341174 которой сказано добавить позиционирование в качестве 3-го параметра, но недавно я обнаружил, что SetAsBox не может принять третий аргумент, может быть, раньше. Вместо этого я нашел SetAsOrientedBox является аналогичным методом и принимает третий параметр для позиционирования. Находится по ссылке Box2dFlash http://www.box2dflash.org/docs/2.1a/reference/Box2D/Collision/Shapes/b2PolygonShape.html

Для обратных вызовов датчика я только пробовал PostSolve вначале. Я недавно подумал, чтобы попробовать другие события, такие как EndContact и обнаружил, что это сработало. Затем я нашел эту страницу, которая, кажется, единственное место, где явно говорится, что датчики только поднимают BeginContact а также EndContact события: http://www.box2dflash.org/docs/2.1a/updating в разделе " События ".

Надеюсь, это сэкономит кому-то время!

Другие вопросы по тегам