Предотвращение нажатия box2d игрока на стены в воздухе - PullRequest
4 голосов
/ 21 ноября 2011

Я установил мир box2d с плеером, управляемым с клавиатуры. Игрок может ходить и прыгать. Как предотвратить "прилипание" игрока к стенам во время прыжка и нажатия клавиши со стрелкой к объекту?

enter image description here

Ответы [ 4 ]

7 голосов
/ 21 ноября 2011

Сделать тело игрока как группу тел (добавить приспособления слева и справа)?и установите трение на 0 enter image description here

3 голосов
/ 21 ноября 2011

Вам нужно изменить способ, которым вы влияете на тело персонажа. Какой метод вы используете, чтобы переместить его влево / вправо? Попробуйте применить LineLineImpulse к телу, а также убедитесь, что ваше трение в определении тела не очень велико.

1 голос
/ 26 января 2014

Вы можете установить трение вашего игрока на 0, а затем выполнять в каждом цикле функцию, которая устанавливает вашу скорость в X на ноль, когда пользователь не нажимает клавиши перемещения.В вашем методе проверки событий вы должны добавить:

if (event.type == KeyReleased) {
    if (!isKeyPressed(Keyboard::Left) && !isKeyPressed(Keyboard::Right)) {
        player.stop();
     }
}

И в вашем player.stop () вы должны сделать что-то вроде:

b2Vec2 vel = body->GetLinearVelocity();
vel.x = 0;
body->SetLinearVelocity(vel);

Это сделает ваш игрок трением 0с платформами с катанием на коньках

0 голосов
/ 21 ноября 2011

Все зависит от того, как работает ваша физика, так как возможностей много.Самый простой способ сделать это, на мой взгляд, это разделить показанное тело на 4 граничные стенки (верхняя, левая, правая, нижняя) и создать только трение, которое может проходить по полу (сверху).

...