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

Уроки · 10

Позиционирование

Центр экрана мы уже умеем находить — в уроке «Центр экрана» это была screen_width() / 2.0 по горизонтали и screen_height() / 2.0 по вертикали: делим пополам, получаем середину. Но делить можно не только на 2.

Если разделить ширину экрана на 3, получится не середина, а одна треть от левого края. Чтобы получить точку в двух третях, эту же треть просто берём дважды:

let w = screen_width();
// Треть ширины от левого края.
let one_third = w / 3.0;
// Две трети ширины от левого края.
let two_thirds = w / 3.0 * 2.0;

Звёздочка * — умножение, то же самое действие, что в школе обозначали знаком ×, только в коде он выглядит иначе.

Так же работает и по вертикали, с screen_height(). Комбинируя такие доли по x и по y, можно поставить точку в любом месте экрана — не только по центру.

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

src/main.rs
use macroquad::prelude::*;
#[macroquad::main("Позиционирование")]
async fn main() {
loop {
clear_background(BLACK);
// Ширина и высота экрана.
let w = screen_width();
let h = screen_height();
// Центр: ровно половина ширины и высоты.
draw_circle(w / 2.0, h / 2.0, 80.0, YELLOW);
// Остальные четыре точки — деление на 3 вместо 2, как в сетке
// "правила третей" из фотографии: экран мысленно делится на
// девять равных прямоугольников, и объекты ставят на
// пересечения линий, а не строго по центру.
draw_circle(w / 3.0, h / 3.0, 80.0, RED);
draw_circle(w / 3.0 * 2.0, h / 3.0, 80.0, GREEN);
draw_circle(w / 3.0, h / 3.0 * 2.0, 80.0, BLUE);
draw_circle(w / 3.0 * 2.0, h / 3.0 * 2.0, 80.0, PURPLE);
next_frame().await;
}
}

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

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

Пять кружков разного цвета встают в узлы сетки: жёлтый — по центру, остальные четыре — в третях экрана. Вот так это выглядит:

  • w / 3.0 и w / 3.0 * 2.0 — то же деление, что и для центра, только на 3 вместо 2. Первое — треть экрана от левого края, второе — две трети.
  • Каждый draw_circle берёт свою пару долей по x и по y и рисует круг в этой точке — так и получается сетка.