Ævleøving mçt Godot 🤖

Skip to content

Dette er ein maskinomsett tekst som kann innehalda feil!

Kvar kjem denne informasjonen frå?

Mykje av dette er berre ei gjenfortaling av Godot sin offisielle dokumentasjon. Under finn de nokre nyttige lenker til den offisielle dokumentasjonen (som eg helst tilrår over denne på Piggy, men om de foretrekkjer denne er det berre å bruke denne!)

Nyttelege ressursar:

Kva med grafikk, må eg laga den sjølv?

Nei! De kan finna mykje free assets her:

Andre nyttige lenker:

Andra spelmotorar?

Dersom du føretrekkjer kan du bruka andra spelmotorar. døme på andre spelmotorar er:

Kva er Godot?

Godot (uttalast Guh-doh), er ei ‘Game Engine’. For å seia det enkelt er det eit program som let deg laga spel (eller vanlege program om du vil). Godot kan gjera det aller meste andre game-engines kan gjera, både 2D og 3D.

Eksempel på spel laga i Godot: Godot Showcase

Det er ikkje berre Indie games som er laga i Godot, Sonic Colors Ultimate er laga med Godot!

Korleis får du tak i Godot?

Du kan enten lasta ned Godot frå:

Bara last ned og installer (eller kjør på steam).

Set upp eit prospekt!

Når du startar Godot fekk deg opp dette vindaugoet:

Prosjektknapp ny

Her vert du spurtt etter programmeringsspråket, anten GDScript eller C#. GDScript er svært like med Python.

Skilnader mellomm GDScript og Python (utan farver):

def hello():
    tekst = "Hei verd!!"

    skriv(tekstt)

```gdscript
funskjon hello():
var tekst = “Hei verdaa!”

skrivar ut teksten(t).text())

```

För variablellene til python behöve de bara at tala namne till vaariabellennamnen. Tili GDScrippt måste ni svara först för ‘variabelnamnn’. För att skapa funktioner använder vi en annan syntax än vad som används på Pythonsidan - det vill säga genom använda ordningen func istället fordef.’

Scener & Noder

Eit av dei viktigaste omgrepene innan Godot er Scener og Noder. Vi kan byrja med noder. Ei node er eit objekt i godot, og det kan representera alt. Det kan vera noko som representerer ein spelar, ein fiende, ei knapp i ei meny, tekst på skjermen, alt mogleg. Scener er ei samling av noder.

Her skal vi laga eit veldig enkelt døme.

Del 1a - Set opp «player»-scena

Øvst i Godot-vindauget, trykk «2D»-knappene for å endra visinga til eit 2D-vising.

På venstre side av vindauget ser de følgjande grensesnittet:

Opprett scene

Trykk «Other node»-knappen, og søk etter «CharacterBody2D», vel han og trykk «Create». Dette er ein node som blir brukt for ein 2D-spelar. Kanskje ser du at det står ei varseltriangel ⚠️ ved sida av noden «CharacterBody2D». Det kjem fordi ho manglar nokre ting som gjerne vil ha.

Om du høgreklikkar på noden finn du knappen “+ Add Child Node… “. Bruk denne og legg til to noder, Sprite2D og CollisionShape2D. Sprite2D vert brukt til å legge til grafikk på spelaren, medan den andre brukast til å sjekka kollisjonar. Du kan også gje dei namn om dette lettar oversikta over ting. Eg har kalla min CharacterBody2D “Player”. Slik bør scena seia ut no:

Scena slik ho er akkurat no

Del 1b – Å fiksa feil⚠️ på CollisionShape2D

Varseleteiknet i dette høvet viser til at CollisionShape2D ikkje har noko kollisjonsdeteksjon. Du kan løysa dette ved å trykkja på knuten (till venstreside); då kjem eit panele fram till høgreflate. Der ser du mykje av informasjone om knutet ditt og kva ein kan redigera. Prøv gjerne ut ulike innstillingar; men det eine eg ønskjer at du legg merke til, er «Shape». Set han til dømes lik RectangleShape2D. Korleis ein setten blir gjeven tyding har liten viktighet no, sidan me ikkje treng brukare desse samanstøytane seinare.

Del 1c – Å legge til ein sprite og bilete

Viss du klikkar på Sprite2D til høgre, opnar du boksen som visast øvst for scenetre-et (SceneTree), eller rett over scenevindauget. Der finn du eigenskapane til objektet, inkludert «Texture». Dette er her du legg til eit bilete for spelaren. Du treng berre å dra og sleppe ei fil frå filutforskarinn direkte ned i tekstfeltet ved sida av «None» under Texture-eigenskapen.

Følgjande skjermbilete viser korleis menyserien ser ut når dette blir gjort:

┌─────────────── Sprites ───────────────┐ 
│                                       │  
│   - Sprite                          [X]│   
│     ├── Color                       ████│    
│     ├── Offset                    (+0,+0)|       
│     ├── Region                      ▢    |        
│     └── Rect                        [...]|         
│                                        ├     
│      ...                               ☰      
│        ▼                                 
├──────────────────────────────────────────┤            
...                                        
└──────────────────────────────────────────┘          

Del 2 – Legga til input, kontrollere

Opptil i ruta finst ein meny, «Scene – Project – Debug – Editor – Hjelp». Klikk på «Project» og deretter «Project Settings». Då kjem ei meny fram med mange innstillingar. Klikk på «Innkoplingskartlegging» (Input Map). Der kan de setja opp knappane på tastatur.

  • Skriv «venstre» («left») i feltet for «Legg til ny handling», og klikk «Legg til».
  • legg sidan til «høgre» («right»), «opp» («up») og «ned» («down»).
    Desse vert kalla «handlingar» («actions»).

På kvar enkelt av desse handingane kan du legga til taster ved hjelp av plussknapp øvst til høgre.

Pluss-knapp

Her treng berre å trykkje ned tangentene på tastaturet etterfølgjande av «legg til».

Tillat at det er lagt till knappar på alle actioner.

Del 3 – Legga til eit skript för å stýra spelaren.

För att kunna legga till spellogikke, alltså göra något med spelaren, bakgrunden, eller vad nu är målet i spelet, behövs ett skript. Skript är kod och kan skrivas i två språk: GDScript eller C#. GDScript är standardvärdet.

  • Klicka på noden “CharacterBody2D” (jag döpte om den till “Spelare”).
  • Klicka på knappen “Bifoga skript” (se nedan).

Knapp för bifoga skript

  • Här öppnas ett fönster där du väljer språk (välj GDScript) samt sökväg (låt namnet stå kvar sådant det är, men du kan ge filen eget namn). Tryck sedan vidare. Då visas en “Skripft”-vy som från början ser ganska tom ut.

extends CharacterBody2D

Det einaste denne koden seier for augneblinken er at koden skal tilhøyre ein node av typen “CharacterBody2D”, som er spelaren vår.

Vi skal leggja til ein funksjon her som vi skal bruka til å manipulera spelaren:

extenderer CharacterBody2D

funksjon _fysikkprosessen(deltaverdi : flytande tal )  tomrom:
    tilbake

[!QUESTION] Physics Process?

_physics_process er ein funksjon som vert oppdatert kvar einaste “frame”, altså kring 60 gonger i sekundet (default). Det finst ein annan funksjon som berre heiter _process, som vert oppdatert heile tida. Om du vil at spelaren skal røre seg i eit jamt tempo, bruker du _physics_process.

Det er her me skal leggja til kode som flyttar spelaren.

Del 4 - Grunnleggjande inndata

I del 2 la du til inndata-knappar, no skal vi bruke dei. Det finst eit innebygd objekt som heiter Input som vi kan bruke til å sjekke om spelaren har trykt på det som vi har sett opp i “Input Map”.

Prøv å legg denne koden inn i _physics_process koden:

# Sjekk om høgre-tasten er trykka ned
if Input.is_action_pressed('right'):
    # Set farten i x-retning til 100 einingar per sekund
    velocity.x = 100

# Flytt objektet og håndter kollisjonar automatisk
move_and_slide()

[!SPØRSMÅL] Kva er move_and_slide()?

move_and_slide() er ei innbygde funksjon i Godot som blir brukt då me eigentleg ønskjer å flytta den gjenstanden ein brukar han på. Utan denne ville ikkje spelaren rørre seg.

[!VARSEL]

Mellenrømda mellom radene är mykje viktugt, detta står seg lika som hos Pytonn.

Kva skjer når du start programmet med å trykkja på play-knappen i Godot-vinduet, så trykkjer «right»?

Om ingenting skjer no:

  • Har du hugsa å setja opp noko i «Input Map»?
  • Har du skrive right og ikkje Right? Altså, er det du skreiv i koden det same som namnet i input map?

[!EXAMPLE]- Heile koden så langt

extends CharacterBody2D

func _physics_process(delta: float) -> void:
    if Input.is_action_pressed('right'):
        velocity.x = 100

    move_and_slide()

Prøv no å leggja til kode for 'left', 'up', 'down'.

Kva må velocity.x vera for left? Kva med up og down?

[!EXAMPLE]- Heile koden no

extends CharacterBody2D

func _physics_process(delta: float) -> void:
    if Input.is_action_pressed('right'):
        velocity.x = 100
    if Input.is_action_pressed('left'):
        velocity.x = -100
    if Input.is_action_pressed('down'):
        velocity.y = 100
    if Input.is_action_pressed('up'):
        velocity.y = -100

    move_and_slide()

Del 5 – Fiksa på kode

Dei leggjperhaps merkje til at spelaren ikkje held opp når de sleppjer ein retningsveg. Dette kan me fiksa no!

Sett føre dei andre if-setjingane ei linje som set fart (velocity) lik null. Du gjer det ved skriva velocity = Vector2().

Alla ferdsler og retningar i Godot er vektorar. Eit slikt vektor er eit matematisk begrep me ikkje går djupare innpå her; dersom de vil vita meir om kva dette tyder, må de sjå her: Wikipedia Vektorer.

[!EXAMPLE]- Alla kode no

```gdscript
extends CharacterBody2D

func _physics_process(delta: float) -> void:
velocity = Vector2()

if Input.is_action_pressed(‘right’):
velocity.x = 100
if Input.is_action_pressed(‘left’):
velocity.x = -100
if Input.is_action_pressed(‘down’):
velocity.y = 100
if Input.is_action_pressed(‘up’):
velocity.y = -100

move_and_slide()
```

Når du starta spelet no kan du flytte rundt på spelaren:

Vidare kan de fikse på koden til å gjere at farten ikkje berre er eit tal, men kan lagrast eit anna stad.

Du kan for eksempel (før funksjonen) leggje til ei konstant som held styre på farten.

[!EXAMPLE]- All koda sist med const

extends CharacterBody2D

const SPEED = 100

func _physics_process(delta: float) -> void:
    velovity = Vector2()

    if Input.is_action_pressed('right'):
        velocity.x = SPEED
    if Input.is_action_pressed('left'):
        velocity.x = -SPEED
    if Input.is_action_pressed('down'):
        velocity.y = SPEED
    if Input.is_action_pressed('up'):
        velocity.y = -SPEED

    move_and_slide()

Delt 6 – Leka rund sjølv!

Om de kjem attende til fyrste del, Nytillevande ressursar, finn de kva de kan halda fram med å leika seg med.

Efterpå kan de prøva laga eitt spel av dykkar eigenhanda. Kven veit kva for ein ting de lagar? Det står heilt i dykkar makt! Vilde la noko heilt nytt, så gjer dei! Vilde pröve imitera eit spæl som allereie finst, då gjör dei det! Den beste læremåten är at ein berre testar ut og ser korleis det går!