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

Уроки · 17

Смещение

Возьмём координаты курсора из урока «Координаты мыши» и прибавим к ним число. Оказывается, этого достаточно, чтобы сдвинуть точку в сторону — простая операция, но не все сразу догадываются, что она вообще для этого годится.

К x прибавили положительное число — точка сдвинулась вправо, прибавили отрицательное — влево. С y то же самое, но помни про урок «Координаты»: ось y растёт вниз, а не вверх, — поэтому прибавление к y сдвигает точку вниз, а отрицательное число — вверх.

let x = mouse_x + 100.0; // сдвиг вправо на 100 пикселей
let y = mouse_y - 50.0; // сдвиг вверх на 50 пикселей

Двигай мышь над демкой — маленькая белая точка отмечает саму позицию курсора. Жёлтый кружок стоит от неё на смещении, заданном полями ниже. Поставь оба поля в 0 — кружок точно совпадёт с точкой курсора и скроет её под собой:

src/main.rs
use macroquad::prelude::*;
#[macroquad::main("Смещение")]
async fn main() {
loop {
clear_background(BLACK);
// Координаты курсора.
let (mouse_x, mouse_y) = mouse_position();
// Белая точка — сама позиция курсора, просто ориентир.
draw_circle(mouse_x, mouse_y, 8.0, WHITE);
// Жёлтый кружок — курсор плюс смещение.
draw_circle(mouse_x + 0.0, mouse_y + 0.0, 40.0, YELLOW);
next_frame().await;
}
}
  • mouse_x + offset x — сдвигает жёлтый кружок по горизонтали: вправо, если число положительное, влево, если отрицательное.
  • mouse_y + offset y — то же самое по вертикали, только не забывай про направление оси y.
  • Белая точка нарисована прямо по mouse_x, mouse_y, без всякого смещения — она и показывает, где на самом деле находится курсор, для сравнения с жёлтым кружком.