private static bool ShouldCollide(Fixture fixtureA, Fixture fixtureB) { if (Settings.UseFPECollisionCategories) { if ((fixtureA.CollisionGroup == fixtureB.CollisionGroup) && fixtureA.CollisionGroup != 0 && fixtureB.CollisionGroup != 0) { return(false); } if (((fixtureA.CollisionCategories & fixtureB.CollidesWith) == Category.None) & ((fixtureB.CollisionCategories & fixtureA.CollidesWith) == Category.None)) { return(false); } if (fixtureA.IsFixtureIgnored(fixtureB) || fixtureB.IsFixtureIgnored(fixtureA)) { return(false); } return(true); } if (fixtureA.CollisionGroup == fixtureB.CollisionGroup && fixtureA.CollisionGroup != 0) { return(fixtureA.CollisionGroup > 0); } bool collide = (fixtureA.CollidesWith & fixtureB.CollisionCategories) != 0 && (fixtureA.CollisionCategories & fixtureB.CollidesWith) != 0; if (collide) { if (fixtureA.IsFixtureIgnored(fixtureB) || fixtureB.IsFixtureIgnored(fixtureA)) { return(false); } } return(collide); }
// 检测两个Fixture之间是否碰撞 public bool CheckCollision(Fixture fixtureA, Fixture fixtureB) { if (fixtureA.CollisionGroup == fixtureB.CollisionGroup && fixtureA.CollisionGroup != 0) { return fixtureA.CollisionGroup > 0; } bool collide = (fixtureA.CollidesWith & fixtureB.CollisionCategories) != 0 && (fixtureA.CollisionCategories & fixtureB.CollidesWith) != 0; if (collide) { if (fixtureA.IsFixtureIgnored(fixtureB) || fixtureB.IsFixtureIgnored(fixtureA)) { return false; } } return collide; }
private static bool ShouldCollide(Fixture fixtureA, Fixture fixtureB) { if (fixtureA.CollisionGroup == fixtureB.CollisionGroup && fixtureA.CollisionGroup != 0) { return(fixtureA.CollisionGroup > 0); } bool collide = (fixtureA.CollidesWith & fixtureB.CollisionCategories) != 0 && (fixtureA.CollisionCategories & fixtureB.CollidesWith) != 0; if (collide) { if (fixtureA.IsFixtureIgnored(fixtureB) || fixtureB.IsFixtureIgnored(fixtureA)) { return(false); } } return(collide); }
private static bool ShouldCollide(Fixture fixtureA, Fixture fixtureB) { if ((fixtureA.CollisionGroup == fixtureB.CollisionGroup) && fixtureA.CollisionGroup != 0 && fixtureB.CollisionGroup != 0) { return(false); } if (((fixtureA.CollisionCategories & fixtureB.CollidesWith) == CollisionCategory.None) & ((fixtureB.CollisionCategories & fixtureA.CollidesWith) == CollisionCategory.None)) { return(false); } if (fixtureA.IsFixtureIgnored(fixtureB) || fixtureB.IsFixtureIgnored(fixtureA)) { return(false); } return(true); }
private static bool ShouldCollide(Fixture fixtureA, Fixture fixtureB) { if (Settings.UseFPECollisionCategories) { if ((fixtureA.CollisionGroup == fixtureB.CollisionGroup) && fixtureA.CollisionGroup != 0 && fixtureB.CollisionGroup != 0) return false; if (((fixtureA.CollisionCategories & fixtureB.CollidesWith) == Category.None) & ((fixtureB.CollisionCategories & fixtureA.CollidesWith) == Category.None)) return false; if (fixtureA.IsFixtureIgnored(fixtureB) || fixtureB.IsFixtureIgnored(fixtureA)) return false; return true; } if (fixtureA.CollisionGroup == fixtureB.CollisionGroup && fixtureA.CollisionGroup != 0) { return fixtureA.CollisionGroup > 0; } bool collide = (fixtureA.CollidesWith & fixtureB.CollisionCategories) != 0 && (fixtureA.CollisionCategories & fixtureB.CollidesWith) != 0; if (collide) { if (fixtureA.IsFixtureIgnored(fixtureB) || fixtureB.IsFixtureIgnored(fixtureA)) { return false; } } return collide; }
private static bool ShouldCollide(Fixture fixtureA, Fixture fixtureB) { if ((fixtureA.CollisionGroup == fixtureB.CollisionGroup) && fixtureA.CollisionGroup != 0 && fixtureB.CollisionGroup != 0) return false; if (((fixtureA.CollisionCategories & fixtureB.CollidesWith) == CollisionCategory.None) & ((fixtureB.CollisionCategories & fixtureA.CollidesWith) == CollisionCategory.None)) return false; if (fixtureA.IsFixtureIgnored(fixtureB) || fixtureB.IsFixtureIgnored(fixtureA)) return false; return true; }