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

Уроки · 88

Свой курсор

Давай нарисуем свой курсор вместо обычной стрелки. Для этого нужно сделать две вещи: спрятать стрелку и нарисовать что-нибудь своё там, где сейчас мышь.

В macroquad для этого есть функция show_mouse. Если передать ей false, стрелка над окном пропадает:

// Прячем обычную стрелку мыши.
show_mouse(false);

Вызываем её один раз, до loop. Дальше она сама помнит, что стрелку нужно прятать.

Координаты мыши мы получали в уроке «Координаты мыши», и кружок рисовали прямо под ними. Здесь всё то же самое, только вместо кружка мы нарисуем прицел. Кольцо делает draw_circle_lines из урока «Расстояние», а две черты через центр — draw_line из урока «Линия на экране».

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

src/main.rs
use macroquad::prelude::*;
#[macroquad::main("Свой курсор")]
async fn main() {
// Прячем обычную стрелку мыши. Делаем это один раз, до цикла.
show_mouse(false);
loop {
clear_background(BLACK);
// Координаты мыши прямо сейчас.
let (x, y) = mouse_position();
// Свой курсор — прицел. Кольцо вокруг курсора.
draw_circle_lines(x, y, 20.0, 3.0, RED);
// Горизонтальная черта через центр.
draw_line(x - 30.0, y, x + 30.0, y, 3.0, RED);
// Вертикальная черта через центр.
draw_line(x, y - 30.0, x, y + 30.0, 3.0, RED);
next_frame().await;
}
}

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

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

Обычная стрелка пропала, а вместо неё за мышью ходит красный прицел. Попробуй прямо здесь:

  • show_mouse(false) прячет обычную стрелку. Вызывается один раз, до loop.
  • mouse_position() на каждом кадре отдаёт свежие координаты мыши.
  • draw_circle_lines рисует кольцо вокруг курсора, а две draw_line рисуют горизонтальную и вертикальную черты через его центр.
  • Прицел рисуется заново на каждом кадре в новом месте, поэтому он ходит вслед за мышью. Хочешь другой вид: меняй радиус, длину черт, толщину и цвет.