Уроки · 4
Ввод с клавиатуры
Игра должна реагировать на игрока, а значит — знать, какие клавиши
сейчас зажаты. В macroquad для этого есть функция is_key_down — та
же идея, что и у screen_width() из урока «Центр
экрана»: она проверяет, зажата ли прямо сейчас
указанная клавиша. Проверяется это на каждом кадре, поэтому реакция
происходит мгновенно, без задержек.
Прежде чем заставлять что-то двигаться по нажатию клавиш, полезно сначала просто увидеть, что нажатия вообще распознаются — этим и займёмся в этом уроке. Про движение — в уроке “Движение”.
Замени содержимое 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), а кружок сверху не нарисован, поэтому он пропадает.