Уроки · 9
Константы
В уроке “Движение” число 8.0 написано в коде четыре
раза — по разу на каждое направление. Если захочется сделать движение быстрее, придётся
находить и менять все четыре места, и легко одно из них пропустить.
У переменной — даже неизменяемой, через let — значение появляется
только в момент, когда до этой строки доходит выполнение программы,
то есть когда игра уже запущена. У константы иначе: значение известно
заранее, ещё до всякого запуска — это просто число, написанное прямо
в коде, и оно всегда одно и то же.
const SPEED: f32 = 8.0;Дальше в коде можно писать SPEED вместо 8.0, и это будет то же
самое число.
Именно потому, что значение известно заранее, константу можно
объявить прямо вне функции main — и тем более вне loop. Для
сравнения: x и y в уроке “Движение” объявлены
внутри main, потому что их начальное значение (screen_width() / 2.0)
вычисляется только когда игра уже запущена — раньше этого узнать
неоткуда. А SPEED не зависит от игры вообще: это число 8.0, и оно
одно и то же что до запуска, что после — поэтому ему незачем ждать,
пока main начнёт выполняться.
Замени содержимое src/main.rs на это:
use macroquad::prelude::*;
// Скорость одна и та же для всех направлений, поэтому храним её// в одном месте вместо того, чтобы писать число в четырёх местах.const SPEED: f32 = 8.0;
#[macroquad::main("Движение")]async fn main() { // Начинаем с центра экрана. let mut x = screen_width() / 2.0; let mut y = screen_height() / 2.0;
loop { clear_background(BLACK);
// Стрелка вверх — двигаем вверх. if is_key_down(KeyCode::Up) { y -= SPEED; } // Стрелка вниз — двигаем вниз. if is_key_down(KeyCode::Down) { y += SPEED; } // Стрелка влево — двигаем влево. if is_key_down(KeyCode::Left) { x -= SPEED; } // Стрелка вправо — двигаем вправо. if is_key_down(KeyCode::Right) { x += SPEED; }
draw_circle(x, y, 100.0, YELLOW);
next_frame().await; }}Запусти как обычно:
cargo runВедёт себя точно так же, как в уроке “Движение” — само число теперь просто живёт в одном месте:
Что здесь происходит
Заголовок раздела «Что здесь происходит»SPEEDнаписано заглавными буквами — так принято называть константы в Rust, чтобы сразу отличать их от обычных переменных.- Если теперь захочется сделать движение быстрее, достаточно поменять
число один раз — в строке
const SPEED: f32 = 8.0;— и это сразу подействует на все четыре направления.