2015-09-30 3 views
0

Итак, я пытаюсь сделать одностороннюю стену, что означает, что мой актер может передать этот объект только одной стороне (например, только нижней или верхней). Я начал читать этот урок: one-way-walls , но когда я попытаюсь, проверив направление моего актера, отключить его, он не работает. Я думаю, что мой вопрос может покупать по этой частиlibgdx - Как отключить столкновение

Так как мы будем использовать BeginContact событие, которое происходит только один раз в столкновение, мы можем использовать только SetEnabled один раз, чтобы изменить поведение контакта. Проблема заключается в том, что после каждого шага контакт снова вернется к включению. Мы могли бы отметить, какие контакты мы отключили, а затем проверяем их список каждый раз в PreSolve, но это неэффективно и неэффективно, чем меня могут беспокоить сегодня. Или в любой день на самом деле :) Итак, мы просто тихо прокрадимся в b2Contact.cpp и закомментируем строку в начале функции обновления, которая снова активирует контакт. После того, как вы закончите, он должен выглядеть так: // Повторно включить этот контакт. // m_flags | = e_enabledFlag;

Проблема в том, что я использую java-версию libgdx в AndroidStudio, и я понятия не имею, как найти и изменить этот фрагмент кода. Так что мне нужен способ изменить его или другое решение, чтобы избежать повторного включения этого состояния столкновения в каждом цикле.

ответ

0

Вы можете решить это в preSolve и сохранить состояние (если контакт должен быть включен или нет) в светильниках userData. Конечно, вы должны вернуть этот флаг в endContact.

+0

Я сделал предварительные решения, и он работал нормально, но я не понимаю, почему ... –

+0

Проблема с beginContact и endContact заключается в том, что tey вызывается только один раз для каждого контакта. Поэтому, если ваш актер прикасается к стене в течение получаса, вы получаете только один звонок для начала. PreSolve, с другой стороны, вызывается на каждом шагу. – Sebastian

+0

Теперь ясно, спасибо! –

Смежные вопросы