2013-06-18 4 views
1

Я работаю над игрой типа Bubble Shooter, где я хочу, чтобы тело не столкнулось ни с чем другим, когда оно лопнуло или падало. Я не могу использовать фильтрацию столкновений, потому что все тела на сцене одного типа. Я хочу отключить столкновение. Я не хочу сталкиваться с телом с любым другим телом. Мне сказали, чтобы установить флаг isSensor в true, но снова я не могу получить флаг и установить его. Пожалуйста, помогите.Отключить столкновение полностью с телом в AndEngine Box2D

ответ

4

Найдено ответа:

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

Установка датчика к истинному не вызывают коллизии эффектов для тела. Но помните, что на самом деле происходят столкновения, и вызываются контактные слушатели. Но эффект столкновения из-за физики не происходит, поэтому вам нужно проверить, что если тело имеет isSesors, установленное в true, ничего не делает в контактах.

+1

Спасибо, это должно быть принято в качестве ответа, поскольку это более непосредственное отношение к вопросу. –

2

Вы также можете использовать бит бит и свойство разряда категории для изменения поведения какого-либо тела и другого тела как нормального.

Таким образом, вы можете создать несколько групп тел, которые реагируют на столкновение как группу. Означает, что одна группа имеет различное поведение при столкновении, чем другое.

Используя этот метод, вы можете выполнить фильтрацию столкновений. Эта вещь представлена ​​в следующем примере.

Physics Collision Filtering

+0

На самом деле у меня несколько тел говорят 100 на экране, и они не могут быть сгруппированы, поэтому я не могу использовать бит категории. Это будет длительный процесс. Но да, ваше решение - это решение, которое может помочь другим. –

+0

Спасибо, что рассмотрели общий сценарий для вашего ответа. – Siddharth

0

Дайте отрицательное значение 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); 
Смежные вопросы