Уроки · 88
Свой курсор
Давай нарисуем свой курсор вместо обычной стрелки. Для этого нужно сделать две вещи: спрятать стрелку и нарисовать что-нибудь своё там, где сейчас мышь.
Спрятать стрелку
Заголовок раздела «Спрятать стрелку»В macroquad для этого есть функция show_mouse. Если передать ей
false, стрелка над окном пропадает:
// Прячем обычную стрелку мыши.show_mouse(false);Вызываем её один раз, до loop. Дальше она сама помнит, что стрелку
нужно прятать.
Нарисовать свой курсор
Заголовок раздела «Нарисовать свой курсор»Координаты мыши мы получали в уроке «Координаты мыши»,
и кружок рисовали прямо под ними. Здесь всё то же самое, только вместо
кружка мы нарисуем прицел. Кольцо делает draw_circle_lines из урока
«Расстояние», а две черты через центр — draw_line из
урока «Линия на экране».
Замени содержимое 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рисуют горизонтальную и вертикальную черты через его центр.- Прицел рисуется заново на каждом кадре в новом месте, поэтому он ходит вслед за мышью. Хочешь другой вид: меняй радиус, длину черт, толщину и цвет.