Как я могу обнаружить столкновения, когда объекты не движутся? - PullRequest
1 голос
/ 17 февраля 2012

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

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

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

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

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

Ответы [ 3 ]

0 голосов
/ 20 февраля 2012

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

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

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

0 голосов
/ 12 апреля 2012

После некоторого изучения 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
}
0 голосов
/ 17 февраля 2012

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

...