Уроки · 3
Центр экрана
В уроке «Круг на экране» кружок просто встал в точку
(150, 150) — число было взято с потолка, и из-за этого кружок
прилип к углу. Сделаем так, чтобы он вставал ровно посередине, в
каком бы окне игра ни открылась.
screen_width и screen_height
Заголовок раздела «screen_width и screen_height»В 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 на это:
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— поэтому, если окно поменяет размер, центр пересчитается вместе с ним.
В уроке «Позиционирование» этим же приёмом найдём не только середину, но и любую другую точку экрана.