2016-01-13 89 views
0

我有这些box2d主体。我想检查身体上的触摸事件。具体来说,触摸身体的某个区域。请看下面的图片,在身体内部,我如何检查用户是否触摸到身体的蓝色区域(右上角)。在box2d主体的特定区域触摸事件

enter image description here

我能得到触摸坐标,将其转换为世界坐标,并检查他们是否与包装盒的重叠,但将触发即使箱子被触摸里面的任何地方。

+0

您需要在代码中定义该区域,并检查它而不是框。 [多边形](https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Polygon.html)是一个好的开始。 – TheOsirian

回答

0

Body本身与Libgdx输入/输出操作没有共同之处 - 这是重要的理解。 Libgdx由

,那么你不能身体实例绑定到听者但是你可以用全做到这一点屏幕(然后计算某种程度上,如果坐标在身体边界 - 那么如果是在哪个部分完全)或你可以通过创建一个Scene2d actor实例

如果我是你,我会创建一个主体的部分大小的角色(例如矩形形状),你想要“可触摸”。 演员应该附上ClickListener与你想触摸的方法。然后在演员的act()方法我会更新演员的位置,由于身体的位置。

1

也许它太晚了,但我会回答你的问题谁需要帮助。

您应该为定义身体边缘和属性的身体创建一个夹具。比你需要添加固定装置作为传感器的身体。代码示例将会是这样的。

// 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");; 

祝您有愉快的一天。