Dette er ei maskinĂžversatt tekst som kann inniholda 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!)
Nyttige ressursar:
Kva med grafikk, mÄ eg laga den sjÞlv?
Nei! De kan finna mykje free assets her:
Andre nyttige lenker:
Andre spelmotorar?
Om du foretrekkjer kan du bruke andre spelmotorar. Eksempel pÄ andre spelmotorar er:
Det finnes mange andre ĂČg, sĂžk gjerne om du vil prĂžve noko anna!
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Ä:
- Den offisielle sida: Godot Official Page.
- Eller pÄ Steam: Godot Steam.
Bara last ned og installer (eller kjÞr pÄ steam).
Sett opp eit prosjekt!
NÄr du startar Godot fÄr du opp dette vinduet:
Her vert du spurt om programmeringssprÄk, GDScript eller C#. GDScript er svÊrt lik Python.
Forskylar mellom GDScript og Python (utan fargar):
def hello():
text = "Hello world!"
print(text)
func hello():
var text = "Hello world!"
print(text)
For variablar i Python treng du berre Ä skrive namnet pÄ variabelen. I GDScript mÄ du skrive var
fyrst. For Ă„ lage funksjonar skriv du func
istadenfor def
.
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 - Sett opp âplayerâ-scenen
PĂ„ toppen av Godot vindauget, trykk â2Dâ knappen for Ă„ endre synsvinkelen til eit 2D syn.
PĂ„ venstre sida av vindauget ser de fĂžlgjande grensesnittet:
Trykk âOther Nodeâ knappen, og sĂžk pĂ„ âCharacterBody2Dâ, vel den og trykk âCreateâ. Dette er ei node som vert brukt for ein 2D spelar. De ser kanskje at det er ei varseltriangel â ïž ved sida av âCharacterBody2Dâ noden. Dette er fordi den manglar nokre ting den gjerne vil ha.
Om du hĂžgre-klikkar pĂ„ noden er det ei â+ Add Child NodeâŠâ knapp. Bruk denne og legg til to nodar, Sprite2D og CollisionShape2D. Sprite2D vert brukt til Ă„ leggje til noko grafikk pĂ„ spelaren, medan den andre vert brukt til Ă„ sjekke for kollisjonar. Du kan ogsĂ„ gje dei namn om det gjer det lettare Ă„ halde oversyn over ting. Eg har gjeve min CharacterBody2D namnet âPlayerâ. Slik bĂžr scena sjĂ„ ut no:
Del 1b - Fikse â ïž pĂ„ CollisjonShape2D
Varseltrekanten i dette tilfellet er at at CollisjonShape2D manglar faktisk kollisjon. Dette kan du fikse ved Ă„ tyrkke pĂ„ noden (til venstre), sĂ„ kjem det opp eit panel pĂ„ hĂžgre side. Her fĂ„r du ei haug med informasjon om noden du kan endre pĂ„. Gjerne leik rundt med det som er der. Men den vi vil fokusere pĂ„ er âShapeâ, sett denne til for eksempel RectangleShape2D. Det er ikkje sĂ„ veldig viktig, vi skal ikkje bruke kollisjonane her.
Del 1c - Legge til ei Sprite, bilete
Om du trykkjer pĂ„ Sprite2D til venstre, fĂ„r du opp feltet til hĂžgre, der det stĂ„r âTextureâ. Her kan du putte inn eit bilete til spelaren. Det er berre Ă„ dra eit bilete inn og sleppe det i feltet.
Slik vil det sjÄ ut etter Ä ha lagt til ei sprite.
Del 2 - Legge til input, kontrollere
PĂ„ toppen av vinduet er det ei meny, âScene - Project - Debug - Editor - Helpâ. Trykk pĂ„ âProjectâ og deretter âProject Settingsâ. Her fĂ„r du opp ei meny med masse innstillingar. Trykk pĂ„ âInput Mapâ. Her kan de setje opp knappar pĂ„ tastaturet.
- I âAdd New Actionâ feltet, skriv âleftâ ĂČg trykk âAddâ.
- Legg deretter til ârightâ, âupâ og âdownâ.
- Desse blir kjende som âActionsâ
- PĂ„ kvar âActionâ kan de leggje inn knappar med Ă„ trykkje pĂ„ + knappen til hĂžgre.
- Her er det berre Ä trykkje pÄ tastaturet, sÄ trykkje Add.
- Legg til knappar pÄ alle actions.
Del 3 - Legge til eit script for Ă„ styre spelaren.
For Ä kunne legge til spelelogikk, altsÄ gjere noko med spelaren, bakgrunnen, eller kva enn det skulle vere i spelet, treng vi eit script. Scripts er kode, og kan skrivast i to sprÄk, GDScript eller C#, GDScript er default.
- Trykk pĂ„ âCharacterBody2Dâ (eg har kalla han âPlayerâ) noden.
- Trykk pĂ„ âAttach Scriptâ knappen (sjĂ„ under)
- Her fĂ„r de opp eit vindu der de kan velje sprĂ„k (velg GDScript) og ein path (berre la han heite det som stĂ„r der, men de kan gje han namn), ogsĂ„ trykk vidare. Her fĂ„r de opp eit âScriptâ-vindu. Det stĂ„r ikkje mykje her til Ă„ byrje med.
extends CharacterBody2D
# Dette er en enkel karakterbevegelse
# This is a simple character movement
# Dette er ei enkel karakterrĂžrsle
Det einaste denne koden seier for augnablikket er at koden skal hĂžyre til ei node av typen âCharacterBody2Dâ, som er spelaren vĂ„r.
Vi skal leggje til ei funksjon her som vi skal bruke til Ă„ manipulere spelaren:
extends CharacterBody2D
func _physics_process(delta: float) -> void:
# Dette er ein funksjon som vert kalla kvar fysikkramme.
# Her kan du leggje til kode som skal kĂžyrast kvar fysikkramme.
return
Fysisk prosess?
_physics_process
er ei funksjon som vert oppdatert for kvar einaste âframeâ, altsĂ„ om lag 60 gongar i sekundet (standard). Det finst ei anna funksjon som berre heiter _process
, som vert oppdatert heile vegen. Om du vil at spelaren skal rĂžrsla i eit jamnt tempo, brukar 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:
if Input.is_action_pressed('right'):
# Flytt karakteren til hĂžgre
velocity.x = 100
# UtfĂžr bevegelsen
move_and_slide()
Kva er move_and_slide()
?
move_and_slide()
er ei innebygd funksjon i Godot som vert brukt nÄr vi vil rÞyndomleg flytte det vi brukar det pÄ. Utytt denne vil ikkje spelaren rÞyndomleg flytte seg.
Warning
Rommet pÄ linjene er svÊrt viktig, dette er likt som i Python.
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 ikkjeRight
? AltsÄ, er det du skreiv i koden det same som namnet i input map?
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
?
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 - Fikse pÄ koden
De legg kanskje merke til at spelaren ikkje stoggar nÄr du slepper ei retning. Det kan vi fikse pÄ no!
FĂžr alle if
-ane, legg til ei linje som set hastigheita til 0. Det kan du gjere med Ă„ skrive velocity = Vector2()
Alle hastigheitar og retningar i Godot er vektorer, dette er eit matte-konsept vi ikkje skal gÄ inn pÄ no, men om du lurer meir pÄ kva dette betyr, kan de gÄ hit: Wikipedia vectors.
Heile koden no
extends CharacterBody2D
func _physics_process(delta: float) -> void:
velovity = 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.
Heile koden til slutt 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()
Del 6 â Lek rundt sjĂžlv!
Om de gÄr tilbake til den fÞrste delen, Nyttige Ressurser, kan dei finne kva dei kan fortsette Ä leke med.
Etter dette kan dei prÞve Ä lage sitt eige spel. Kva dei lagar er opp til dei! Om du vil lage noko heilt nytt, gjer det! Om dei vil prÞve Ä etterligne eit spel som alt finst, gjer det! Best mÄte Ä lÊre pÄ er Ä prÞve!