Box2d Player постоянно прыгает при использовании enum - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь создать игрока, который прыгает и двигается влево и вправо.

В данный момент игрок прыгает бесконечно на месте или движется бесконечно влево или вправо при нажатии соответствующих клавиш.

Что мне нужно добавить к этому коду, чтобы персонаж перестал прыгать или двигаться после отпускания клавиши?

Вот код на данный момент:

void Character::update()
{
    b2Vec2 pos = m_body->GetPosition();
    setPosition(pos.x, pos.y);
    float angle = m_body->GetAngle()* RAD2DEG;
    setRotation(angle);

    if (m_movingStates[LEFT])
    {
        m_body->ApplyLinearImpulseToCenter(b2Vec2(-0.03, 0.0f), true);
    }

    if (m_movingStates[RIGHT])
    {
        m_body->ApplyLinearImpulseToCenter(b2Vec2(0.03, 0.0f), true);
    }

    if (m_movingStates[JUMP] && m_sit)
    {
        m_body->ApplyLinearImpulseToCenter(b2Vec2(0.f, -0.1f), true);
    }
}

void Character::onKeyPress(sf::Event event)
{
    if (event.key.code == sf::Keyboard::Left)m_movingStates[LEFT] = true;
    if (event.key.code == sf::Keyboard::Right)m_movingStates[RIGHT] = true;
    if (event.key.code == sf::Keyboard::Space)m_movingStates[JUMP] = true;
}

void Character::onKeyRelease(sf::Event event)
{
    if (event.type == sf::Event::KeyReleased && event.key.code == sf::Keyboard::Left) m_movingStates[LEFT] = false;
    if (event.type == sf::Event::KeyReleased && event.key.code == sf::Keyboard::Right) m_movingStates[RIGHT] = false;
    if (event.type == sf::Event::KeyReleased && event.key.code == sf::Keyboard::Space) m_movingStates[JUMP] = false;
}
...