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

Уроки · 16

Иначе

if уже знаком по уроку «Клик мышью»: код внутри выполняется, только если условие верно. У if есть пара — else. Код внутри else выполняется ровно в противоположном случае: только когда условие не верно.

Центр экрана здесь понадобится не один раз, а сразу в трёх местах — для обоих кружков сверху и для кружка снизу. Вместо того чтобы трижды писать screen_width() / 2.0 и screen_height() / 2.0, посчитаем его один раз и дадим ему имя, как в уроке «Переменные» — а дальше просто подставляем center_x и center_y везде, где он нужен.

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

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 — просто отдельной строчкой после условия. Она выполняется на каждом кадре без исключений, независимо от того, нажата кнопка или нет.