2012-02-17 6 views
1

Полагаю, чтобы понять вопрос, я должен объяснить игру. Мячи падают вниз по экрану, и когда вы нажимаете на шар, он меняется на другой шар, основанный на его типе. Например, щелчок на одном шаре временно заморозит окружающие шары. Некоторые взорвут и уничтожат других поблизости.Как обнаружить столкновения, когда объекты не перемещаются?

В случае, если у меня есть замороженный шар (body.setType(BodyType.STATIC)), а другой шар рядом с ним взрывается (кинетический шар затем устанавливается на больший статический шар), никаких столкновений не обнаружено.

Что я могу сделать для обнаружения столкновений статических тел? Я имею в виду, да, они не двигаются, поэтому они не должны сталкиваться, но у вас есть статический объект, а затем, в следующий момент, у вас есть другой статический объект, касающийся его, так что не стоит ли что-то учитывать?

Дайте мне знать, если вам нужно больше разъяснений.

ОБНОВЛЕНИЕ: У меня есть идея, которая может работать, но для этого требуется выполнение чего-то, чего я не могу понять. Как заставить динамическое тело вести себя как статическое тело? Я имею в виду, чтобы позиция динамического тела не влияла на гравитацию или столкновения?

ответ

0

После некоторого поиска в API я наконец нашел метод, который мне помогает. Ниже приведен код, который исправляет проблему.

//Find the two types of bodies in question 
if (AABB.testOverlap(ballA.getBody().m_fixtureList.m_aabb, ballB.getBody().m_fixtureList.m_aabb)) 
{ 
    //Add new contact to collisionListener 
} 
-1

IIUC, вы могли бы подумать, что взрывающийся шар имеет больший радиус (эквивалентный зоне, подверженной взрыву), тогда затронутые шарики вокруг будут те, которые пересекают эту большую круговую область.

+0

Чтобы уточнить, логика игры о том, как работают взаимодействия шаров, осуществляется через ContactListener. Конечно, есть и другие методы, но это создало бы беспорядок из кода. –

0

Так что я думаю, что есть два способа сделать это (не проверял, хотя):

первых, с датчиками. Если вы добавите датчик в «замороженное» статическое тело, датчик все равно должен обнаруживать столкновения с другими статическими объектами, даже если само тело является статическим.

Вторая возможность заключается в том, что ваше «замороженное» тело представляет собой кинематическую форму вместо статической формы. Они должны все еще обнаруживать столкновения и иметь преимущество в том, что они могут иметь заданную пользователем скорость, не реагируя на другие объекты физики. Однако я не совсем уверен, создают ли кинематические формы контактные точки со статическими телами.

+0

Обнаружено это из документов: «Крепление на статическом теле может только сталкиваться с динамическим телом. Крепление на кинематическом теле может только сталкиваться с динамическим телом». Это исключает второе. –

+0

От того, что я видел от датчиков, он должен работать, но это не так. Я установил один из статических объектов на датчик, но 'beginContact' не дает контакта двух статических объектов. –