По сути, вот мой код:


bool Player::onCollision(BaseOBJ* obj)
{
    if(obj->name == "phys_static")
    {
        jumping = true;
    }
    return true;
}

void Player::jump() { if(jumping == true) { ApplyForce(Vec2(0.f, -13000.f), Vec2(0.f, 0.f)); jumping = false; } }

OnCollision вызывается первым, когда происходит столкновение. Не вызывается, если не было новых столкновений (например, будут регистрироваться только прыжки, а не перемещение из стороны в сторону)

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

0
Chris 13 Мар 2011 в 05:26
Player::onCollision всегда возвращает true, верно?
 – 
Valerij
13 Мар 2011 в 05:42
Код, который обрабатывает события клавиатуры, может быть более интересным. В противном случае я, возможно, поместил бы некоторый вывод отладки в прыжок, чтобы увидеть, вызывается ли функция и какое значение имеет флаг перехода.
 – 
thorsten müller
13 Мар 2011 в 06:23
1
Этот код вызывает больше вопросов, чем дает ответов. Каков нормальный ход событий? Является ли «прыжок» истинным или ложным до того, как вы нажмете клавишу прыжка? Нажатие клавиши перехода вызывает jump()? onCollision вызывается в начале прыжка, или в конце, или в обоих случаях?...
 – 
Beta
13 Мар 2011 в 07:13

1 ответ

Часто упускаемая из виду проблема с удержанием клавиши заключается в том, что ваша операционная система преобразует это в быстрые повторяющиеся нажатия.

Пример: в текстовом редакторе удерживайте клавишу A. Появится одна буква «а», а затем, после небольшой задержки: аааааааааааааа (многократное нажатие клавиши «А» отправляется в активное приложение).

Ваша функция прыжка вызывается неоднократно и каким-то образом искажает то, как вы планировали, чтобы проверка прыжка работала?

Если нет, пожалуйста, ответьте на некоторые из вопросов, заданных предыдущими комментаторами.

P.S. Предложение на стороне: мне кажется, что «прыжки» должны называться «canJump» или «allowJumping». Это позволяет избежать путаницы. Прямо сейчас это звучит так, как будто оно указывает, прыгаете ли вы, тогда как на самом деле вы используете его, чтобы указать, умеете ли прыгать.

0
Timo 14 Мар 2011 в 16:59