【问题标题】:Disable collision completely of a body in AndEngine Box2D在 AndEngine Box2D 中完全禁用身体的碰撞
【发布时间】:2013-06-18 07:19:47
【问题描述】:

我正在开发一款泡泡射击类型的游戏,我希望身体在爆裂或跌落时不会与其他任何东西发生碰撞。 我不能使用碰撞过滤,因为场景中的所有物体都是同一类型的。 我想禁用碰撞。我不想让身体与任何其他身体发生碰撞。有人告诉我将 isSensor 标志设置为 true,但我再次无法获取标志并设置它。 请帮忙。

【问题讨论】:

    标签: android box2d andengine game-physics


    【解决方案1】:

    找到答案:

    for(int i=0; i<getBody().getFixtureList().size();i++){
            this.getBody().getFixtureList().get(i).setSensor(true);
        }
    

    将传感器设置为 true 不会对身体产生碰撞影响。但请记住,实际上正在发生冲突并调用了联系侦听器。但是由于物理原因没有发生碰撞效应,因此您需要检查身体是否将 isSesors 设置为 true,在接触侦听器中什么也不做。

    【讨论】:

    • 谢谢,这应该被接受为答案,因为它与问题更相关。
    【解决方案2】:

    您还可以使用掩码位和类别位属性来更改某些主体的行为,而其他主体则作为正常行为。

    通过这种方式,您可以创建多个响应碰撞的实体组。表示一组与另一组具有不同的碰撞行为。

    使用此方法,您可以执行碰撞过滤。以下示例中表示的那个东西。

    Physics Collision Filtering

    【讨论】:

    • 实际上我在屏幕上有多个主体,例如 100,它们无法分组,因此我无法使用类别位。那将是一个漫长的过程。但是,是的,您的解决方案可能对其他人有所帮助。
    • 感谢您考虑一般情况的回答。
    【解决方案3】:

    如果您不希望它们发生碰撞,则为您的夹具的 filterindex 提供负值;如果您希望它们发生碰撞,则为它们提供正值。

    用于消除碰撞

    public static final FixtureDef PLAYERS_FIXTURE_DEF = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f, false, CATEGORYBIT_PLAYERS, MASKBITS_WALL, (short)-1);
    

    为了碰撞

    public static final FixtureDef PLAYERS_FIXTURE_DEF = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f, false, CATEGORYBIT_PLAYERS, MASKBITS_WALL, (short)1);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多