我在以下代码中添加传感器夹具有两个问题。重新定位向量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);
答案 0 :(得分:1)
我在这个答案中使用了提示https://stackoverflow.com/a/4707127/1172891,它说要将定位添加为第三个参数,但我最近发现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 部分。
希望能节省一些时间!