我有这些box2d主体。我想检查身体上的触摸事件。具体来说,触摸身体的某个区域。请看下面的图片,在身体内部,我如何检查用户是否触摸到身体的蓝色区域(右上角)。在box2d主体的特定区域触摸事件
我能得到触摸坐标,将其转换为世界坐标,并检查他们是否与包装盒的重叠,但将触发即使箱子被触摸里面的任何地方。
我有这些box2d主体。我想检查身体上的触摸事件。具体来说,触摸身体的某个区域。请看下面的图片,在身体内部,我如何检查用户是否触摸到身体的蓝色区域(右上角)。在box2d主体的特定区域触摸事件
我能得到触摸坐标,将其转换为世界坐标,并检查他们是否与包装盒的重叠,但将触发即使箱子被触摸里面的任何地方。
Body本身与Libgdx输入/输出操作没有共同之处 - 这是重要的理解。 Libgdx由
,那么你不能身体实例绑定到听者但是你可以用全做到这一点屏幕(然后计算某种程度上,如果坐标在身体边界 - 那么如果是在哪个部分完全)或你可以通过创建一个Scene2d actor实例。
如果我是你,我会创建一个主体的部分大小的角色(例如矩形形状),你想要“可触摸”。 演员应该附上ClickListener与你想触摸的方法。然后在演员的act()方法我会更新演员的位置,由于身体的位置。
也许它太晚了,但我会回答你的问题谁需要帮助。
您应该为定义身体边缘和属性的身体创建一个夹具。比你需要添加固定装置作为传感器的身体。代码示例将会是这样的。
// 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");;
祝您有愉快的一天。
您需要在代码中定义该区域,并检查它而不是框。 [多边形](https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Polygon.html)是一个好的开始。 – TheOsirian