【发布时间】:2013-06-18 07:19:47
【问题描述】:
我正在开发一款泡泡射击类型的游戏,我希望身体在爆裂或跌落时不会与其他任何东西发生碰撞。 我不能使用碰撞过滤,因为场景中的所有物体都是同一类型的。 我想禁用碰撞。我不想让身体与任何其他身体发生碰撞。有人告诉我将 isSensor 标志设置为 true,但我再次无法获取标志并设置它。 请帮忙。
【问题讨论】:
标签: android box2d andengine game-physics
我正在开发一款泡泡射击类型的游戏,我希望身体在爆裂或跌落时不会与其他任何东西发生碰撞。 我不能使用碰撞过滤,因为场景中的所有物体都是同一类型的。 我想禁用碰撞。我不想让身体与任何其他身体发生碰撞。有人告诉我将 isSensor 标志设置为 true,但我再次无法获取标志并设置它。 请帮忙。
【问题讨论】:
标签: android box2d andengine game-physics
找到答案:
for(int i=0; i<getBody().getFixtureList().size();i++){
this.getBody().getFixtureList().get(i).setSensor(true);
}
将传感器设置为 true 不会对身体产生碰撞影响。但请记住,实际上正在发生冲突并调用了联系侦听器。但是由于物理原因没有发生碰撞效应,因此您需要检查身体是否将 isSesors 设置为 true,在接触侦听器中什么也不做。
【讨论】:
您还可以使用掩码位和类别位属性来更改某些主体的行为,而其他主体则作为正常行为。
通过这种方式,您可以创建多个响应碰撞的实体组。表示一组与另一组具有不同的碰撞行为。
使用此方法,您可以执行碰撞过滤。以下示例中表示的那个东西。
【讨论】:
如果您不希望它们发生碰撞,则为您的夹具的 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);
【讨论】: