Перейти к содержимому

Уроки · 4

Ввод с клавиатуры

Игра должна реагировать на игрока, а значит — знать, какие клавиши сейчас зажаты. В macroquad для этого есть функция is_key_down — та же идея, что и у screen_width() из урока «Центр экрана»: она проверяет, зажата ли прямо сейчас указанная клавиша. Проверяется это на каждом кадре, поэтому реакция происходит мгновенно, без задержек.

Прежде чем заставлять что-то двигаться по нажатию клавиш, полезно сначала просто увидеть, что нажатия вообще распознаются — этим и займёмся в этом уроке. Про движение — в уроке “Движение”.

Замени содержимое src/main.rs на это:

src/main.rs
use macroquad::prelude::*;
#[macroquad::main("Ввод с клавиатуры")]
async fn main() {
loop {
clear_background(BLACK);
// Стрелка вверх зажата — рисуем круг по центру экрана.
if is_key_down(KeyCode::Up) {
draw_circle(screen_width() / 2.0, screen_height() / 2.0, 100.0, YELLOW);
}
next_frame().await;
}
}

Запусти как обычно:

Окно терминала
cargo run

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

  • KeyCode::Up — это просто обозначение стрелки “вверх” на клавиатуре, а is_key_down(KeyCode::Up) проверяет, зажата ли она прямо сейчас.
  • if is_key_down(...) { ... } — код в фигурных скобках выполняется, только пока клавиша зажата. Отпустил клавишу — и на этом кадре draw_circle просто не вызывается: экран уже закрашен чёрным (clear_background), а кружок сверху не нарисован, поэтому он пропадает.