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

Уроки · 3

Центр экрана

В уроке «Круг на экране» кружок просто встал в точку (150, 150) — число было взято с потолка, и из-за этого кружок прилип к углу. Сделаем так, чтобы он вставал ровно посередине, в каком бы окне игра ни открылась.

В macroquad для этого есть две функции — такие же, как draw_circle или clear_background, которые уже встречались.

Функция — это кусок кода с именем, который можно вызвать из своего кода. Подробнее про функции — в уроке «Свои функции»; сейчас достаточно знать, что screen_width() и screen_height() — именно такие вызовы: screen_width() возвращает, сколько пикселей сейчас в ширину у окна игры, screen_height() — сколько в высоту. Не какое-то заранее заданное число, а то, что есть прямо сейчас, у этого конкретного окна.

Середина по горизонтали — это ровно половина всей ширины: пикселей одинаково и слева от неё, и справа. Так же и по вертикали, только с высотой. Значит, координаты середины экрана — это:

draw_circle(screen_width() / 2.0, screen_height() / 2.0, 100.0, YELLOW);

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

src/main.rs
use macroquad::prelude::*;
#[macroquad::main("Центр экрана")]
async fn main() {
loop {
clear_background(BLACK);
// Середина экрана: половина ширины, половина высоты.
draw_circle(screen_width() / 2.0, screen_height() / 2.0, 100.0, YELLOW);
next_frame().await;
}
}

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

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

Кружок стоит ровно посередине окна. Растяни или сузь окно — кружок всё равно останется в центре, потому что screen_width() и screen_height() каждый раз возвращают текущий размер, а не тот, что был при запуске. Вот так это выглядит:

  • screen_width() и screen_height() — текущие ширина и высота окна в пикселях, не зафиксированное заранее число.
  • Половина ширины — точка, одинаково далёкая от левого и правого края, то есть середина по горизонтали. То же самое с половиной высоты по вертикали.
  • screen_width() / 2.0 и screen_height() / 2.0 вызываются заново на каждом кадре, внутри loop — поэтому, если окно поменяет размер, центр пересчитается вместе с ним.

В уроке «Позиционирование» этим же приёмом найдём не только середину, но и любую другую точку экрана.