Уроки · 16
Иначе
if уже знаком по уроку «Клик мышью»: код внутри
выполняется, только если условие верно. У if есть пара — else.
Код внутри else выполняется ровно в противоположном случае: только
когда условие не верно.
Центр экрана здесь понадобится не один раз, а сразу в трёх местах —
для обоих кружков сверху и для кружка снизу. Вместо того чтобы трижды
писать screen_width() / 2.0 и screen_height() / 2.0, посчитаем
его один раз и дадим ему имя, как в уроке
«Переменные» — а дальше просто подставляем
center_x и center_y везде, где он нужен.
Замени содержимое src/main.rs на это:
use macroquad::prelude::*;
#[macroquad::main("Иначе")]async fn main() { loop { clear_background(BLACK);
// Центр экрана — считаем один раз и используем ниже несколько раз. let center_x = screen_width() / 2.0; let center_y = screen_height() / 2.0;
if is_mouse_button_down(MouseButton::Left) { // Кнопка нажата — рисуем жёлтый кружок. draw_circle(center_x, center_y - 150.0, 80.0, YELLOW); } else { // Не нажата — рисуем красный. draw_circle(center_x, center_y - 150.0, 80.0, RED); }
// А этот рисуем всегда, вне зависимости от кнопки. draw_circle(center_x, center_y + 150.0, 80.0, BLUE);
next_frame().await; }}Запусти как обычно:
cargo runСверху — кружок, который меняет цвет: красный, пока кнопка мыши не нажата, и жёлтый, пока она зажата. Снизу — синий кружок, который просто всегда на месте. Попробуй прямо здесь:
Что здесь происходит
Заголовок раздела «Что здесь происходит»if is_mouse_button_down(...) { ... } else { ... }— выполняется ровно один из двух блоков, никогда не оба сразу: если условие верно — первый, если нет — второй.- Пока кнопка не нажата, верхний кружок красный: выполняется именно
блок
else, потому что условие вifложно. - Нижний, синий, кружок нарисован вообще без всякого
if— просто отдельной строчкой после условия. Она выполняется на каждом кадре без исключений, независимо от того, нажата кнопка или нет.