Far å flyg

Screenshot

Ett spel är inte så roligt utan att det händer något på skärmen. Till att börja med visar vi en boll som vi kan styra med knapptryckningar.

Implementering

De första två raderna i main-funktionen använder funktionerna screen_width() och screen_height() för att få bredden och höjden på fönstret. Dessa värden delas med 2 för att få koordinaterna till mitten av skärmen, och tilldelas till variablerna x och y.

    let mut x = screen_width() / 2.0;
    let mut y = screen_height() / 2.0;

Hantera tangenbordsinput

Inne i loopen rensar vi fortfarande skärmen, vilket måste göras vid varje bildruta. Därefter kommer fyra if-satser som kollar om piltangerna är nedtryckta och ändrar på variablerna x eller y som avgör var cirkeln ska visas. Funktionen is_key_down() returnerar true om den angivna tangenten är nedtryckt. Dess argument är enumen KeyCode som innehåller alla tangenter som finns på ett tangentbord.

        if is_key_down(KeyCode::Right) {
            x += 1.0;
        }
        if is_key_down(KeyCode::Left) {
            x -= 1.0;
        }
        if is_key_down(KeyCode::Down) {
            y += 1.0;
        }
        if is_key_down(KeyCode::Up) {
            y -= 1.0;
        }

Info

Vilka andra tangenter som finns tillgängliga finns beskrivet i dokumentationen för KeyCode.

Rita en cirkel

Slutligen ritas cirkeln ut på de angivna koordinaterna med en radie på 16 och med gul färg på koordinaterna x och y.

        draw_circle(x, y, 16.0, YELLOW);

Info

Macroquad har ett flertal konstanter för vanliga färger, det går också att använda makrot color_u8 för att ange en färg med värden för röd, grön, blå och transparens. Vilka andra former som går att rita med Macroquad finns beskrivet i dokumentationen för Macroquads Shape API.

Utmaning

Ändra värdet som adderas till x och y för att öka eller minska hastigheten som cirkeln förflyttas.

Källkod

Hela källkoden i main.rs ska nu se ut så här:

use macroquad::prelude::*;

#[macroquad::main("My game")]
async fn main() {
    let mut x = screen_width() / 2.0;
    let mut y = screen_height() / 2.0;

    loop {
        clear_background(DARKPURPLE);

        if is_key_down(KeyCode::Right) {
            x += 1.0;
        }
        if is_key_down(KeyCode::Left) {
            x -= 1.0;
        }
        if is_key_down(KeyCode::Down) {
            y += 1.0;
        }
        if is_key_down(KeyCode::Up) {
            y -= 1.0;
        }

        draw_circle(x, y, 16.0, YELLOW);

        next_frame().await
    }
}

När du kör programmet så kommer det visas en gul cirkel i mitten av skärmen. Prova att använda piltangenterna för att flytta omkring bollen.

Quiz

Testa dina nya kunskaper genom att svara på följande quiz innan du går vidare.

Agical