Добавление второго прибора в качестве датчика к корпусу в 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 в разделе " События ".
Надеюсь, это сэкономит кому-то время!