Уроки · 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 на это:
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и рисует круг в этой точке — так и получается сетка.