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

Уроки · 1

Круг на экране

Фреймворк — это готовый набор инструментов, который берёт на себя всё скучное: открыть окно, нарисовать что-то на экране, обработать нажатие клавиши. Без него пришлось бы писать это самому с нуля. Мы будем использовать macroquad — он выбран за простоту: минимум настроек, чтобы быстро переходить от идеи к результату.

В папке проекта hello_world (её мы создали в уроке “Hello World”) введи:

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

Это добавит macroquad в зависимости проекта.

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

src/main.rs
use macroquad::prelude::*;
#[macroquad::main("Круг")]
async fn main() {
loop {
clear_background(BLACK);
// Круг в точке (150, 150): x, y — центр, дальше радиус и цвет.
draw_circle(150.0, 150.0, 100.0, YELLOW);
next_frame().await;
}
}

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

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

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

  • use macroquad::prelude::*; — подключает не наш код, а уже готовый, написанный другими: библиотеку macroquad. Без этой строки ничего из macroquad здесь не работало бы — ни draw_circle, ни clear_background, ничего. prelude — это набор самых ходовых вещей библиотеки, собранных в одном месте, а * значит «всё, что в нём есть».
  • #[macroquad::main("Круг")] — этой строкой мы подключаем фреймворк к нашей функции main: она указывает, что окно игры будет называться “Круг”, а всё, что описано внутри main, будет выполняться самим macroquad.
  • loop { ... } — игра рисует картинку заново много раз в секунду, поэтому всё, что должно быть на экране, описывается внутри бесконечного цикла.
  • clear_background(BLACK) — закрашивает экран одним цветом перед тем, как нарисовать что-то новое.
  • draw_circle(x, y, радиус, цвет) — рисует круг, первые два числа — это его центр: 150.0, 150.0 значит «150 пикселей от левого края и 150 пикселей сверху».
  • next_frame().await — говорит “кадр готов, покажи его” и ждёт следующего. Без этой строки окно не будет обновляться.