我有这些 box2d 实体。我想检查 body 上的触摸事件。具体来说,就是触摸 body 的某个部位。请参见下图,在主体内,如何检查用户是否触摸了主体的蓝色区域(右上角)。
我可以获取触摸坐标,将其转换为世界坐标并检查它们是否与盒子的坐标重叠,但即使触摸盒子内部的任何位置,也会触发。
最佳答案
也许为时已晚,但我会回答您关于谁需要帮助的问题。
您应该为主体创建一个固定装置,用于定义主体的边缘和属性。您需要在车身上添加固定装置作为传感器。代码示例看起来像这样。
// create bodydef
BodyDef bdef = new BodyDef();
bdef.type = BodyType.DynamicBody;
bdef.position.set(60 / PPM, 120 / PPM);
bdef.fixedRotation = true;
bdef.linearVelocity.set(1f, 0f);
// create body from bodydef
Body body = world.createBody(bdef);
// create box shape for player collision box
PolygonShape shape = new PolygonShape();
shape.setAsBox(13 / PPM, 13 / PPM);
// create fixturedef for player collision box
FixtureDef fdef = new FixtureDef();
fdef.shape = shape;
fdef.density = 1;
fdef.friction = 0;
// create player collision box fixture
body.createFixture(fdef);
shape.dispose();
// create box shape SENSOR for player
shape = new PolygonShape();
shape.setAsBox(13 / PPM, 3 / PPM, new Vector2(0, -13 / PPM), 0);
// create fixturedef SENSOR for player
fdef.shape = shape;
fdef.isSensor = true;
// create player SENSOR fixture
body.createFixture(fdef).setUserData("SENSOR");;
祝你有美好的一天。
关于java - box2d 主体特定区域上的触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34757719/