По сути, вот мой код:
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 вызывается первым, когда происходит столкновение. Не вызывается, если не было новых столкновений (например, будут регистрироваться только прыжки, а не перемещение из стороны в сторону)
Обычно он работает нормально, однако, если я удерживаю клавишу прыжка на протяжении всего прыжка (с момента запуска до момента касания земли), я не могу снова прыгнуть. Любые решения?
1 ответ
Часто упускаемая из виду проблема с удержанием клавиши заключается в том, что ваша операционная система преобразует это в быстрые повторяющиеся нажатия.
Пример: в текстовом редакторе удерживайте клавишу A. Появится одна буква «а», а затем, после небольшой задержки: аааааааааааааа (многократное нажатие клавиши «А» отправляется в активное приложение).
Ваша функция прыжка вызывается неоднократно и каким-то образом искажает то, как вы планировали, чтобы проверка прыжка работала?
Если нет, пожалуйста, ответьте на некоторые из вопросов, заданных предыдущими комментаторами.
P.S. Предложение на стороне: мне кажется, что «прыжки» должны называться «canJump» или «allowJumping». Это позволяет избежать путаницы. Прямо сейчас это звучит так, как будто оно указывает, прыгаете ли вы, тогда как на самом деле вы используете его, чтобы указать, умеете ли прыгать.
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .
jump()
?onCollision
вызывается в начале прыжка, или в конце, или в обоих случаях?...