TDDE04 Introduktion till programmering och datalogiskt tänkande
Ht1-2
## Docs
[Vad är Godot](intro.sv.shtml)
* [Sammanfattning](sam.sv.shtml)
* [Varaibler](var.sv.shtml) - [Godot Doc](https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_basics.html#example-of-gdscript)
* [Boolska-värden](boolska.sv.shtml)
* [Tecken, void och null](tecken.sv.shtml)
* [Operatorer](operator.sv.shtml) - [Godot Doc](https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_basics.html#operators)
* [Arrayer](arrayer.sv.shtml) - [Godot Doc](https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_basics.html#array)
* [For-loop](for.sv.shtml) - [Godot Doc](https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_basics.html#for)
* [While-loop](while.sv.shtml) - [Godot Doc](https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_basics.html#while)
* [If-sats](if.sv.shtml) - [Godot Doc](https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_basics.html#if-else-elif)
* [Funktioner](func.sv.shtml) - [Godot Doc](https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_basics.html#functions)
* [Signaler](signals.sv.shtml) - - [Godot Doc](https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/gdscript_basics.html#if-else-elif)
## Grundläggande, inbygda funktioner
* `print()`: Skriv ut argument till consollen så att vi kan t.ex. se innehållet i en varaibel. Används uteslutande för att söka fel och säkerställa rätt betteende. T.ex. print(health), skriver kanske ut 5 om variable health är 5
* `str()`: Används för att göra om t.ex. en variable till en text-representations eller en string. Behövs för att kombinera nummer med text till vår HUD, t.ex för att visa hur många poäng vi har.
* `len()`: Ger antalet ellement i t.ex. en Array. T.ex. `len(enemies)` blir 5 om det finns 5 objekt i arrayen enemies som vi skapat för att spara alla fiender vi vill skjuta på.
* `abs()`: Ger absolutbeloppet av argumentet, dvs tar bort minustecken. abs(-5) = 5. BRa föra tt veta om vår hastighet är större än ett visst värde, oberoedne av riktning.
* `sign()`: Metod för att ta reda på tecknet för ett tal. Returnerar -1, 0 eller 1
* `Vector2()`: Skapa ett objekt av typen vektor (x,y). T.ex. `var v = Vector(2,3)`
Samtliga inbyggda funktioner i godot [Global Scope finns här](https://docs.godotengine.org/en/stable/classes/class_%40globalscope.html)
* [`queue_free()`](https://docs.godotengine.org/en/stable/classes/class_node.html#class-node-method-queue-free): Markera ett objekt som redo för att förstöras och vid rätt tillfälle förstörs objektet.
* [`Input.is_action_pressed()`](https://docs.godotengine.org/en/stable/classes/class_input.html#class-input-method-is-action-pressed): testa om en namngiven interaktion (tangentbord, musknapp)... är aktiv, t.ex. nedtryckt. Jämför även med metoden [`is_action_just_pressed()`](https://docs.godotengine.org/en/stable/classes/class_input.html#class-input-method-is-action-just-pressed) Se gärna [detta exemplet på användning](https://docs.godotengine.org/en/stable/tutorials/inputs/input_examples.html#events-versus-polling)
* [`randi_range()` osv](https://docs.godotengine.org/en/stable/classes/class_randomnumbergenerator.html#methods): Godot innehåller ett flertal slump-funktioner vi kan använda för att skapa slumpvisa tal. De kan används direkt som inbyggda funktioner var som helst.
## Control-noder och UI concept
* [Label](https://docs.godotengine.org/en/stable/classes/class_label.html): Text-label. Vi använder egenskapen `.text` på en Label för att ändra dess text.
* [CanvasLayer](https://docs.godotengine.org/en/stable/classes/class_canvaslayer.html) - Om en kamera rör på sig kan man använda ett CanvasLager för att lägga UI-komponenter i så att de ligger på samma plats hela tiden.
## 2D-noder
* [Sprite2D](https://docs.godotengine.org/en/stable/classes/class_sprite2d.html) - Bilder.
* [Node2D](https://docs.godotengine.org/en/stable/classes/class_node2d.html) - En tom nod som dock har position och rotation.Vi använder den för att räkna ut riktningar.
* [Camera2D](https://docs.godotengine.org/en/stable/classes/class_camera2d.html) - Det som visas är den aktiva kameran i scenträdet. Om ingen Camera2D lagts till till scenen finns en generll. Genom att flytta en Camera2D kan vi t.ex. följa spelaren. Kameran kan läggas som barn till Noder, samtidigt som rotation av kameran tas bort.
* [Vector2](https://docs.godotengine.org/en/stable/classes/class_vector2.html#class-vector2): en 2-dimmensionell vektor med x- och y-värde. Metoden [`length()`](https://docs.godotengine.org/en/stable/classes/class_vector2.html#class-vector2-method-length) ger oss vektorns längd och metoden [`normalized()`](https://docs.godotengine.org/en/stable/classes/class_vector2.html#class-vector2-method-normalized) ger oss en enhets-vektor i vektorns riktning, alltså en vektor med längden 1 i samma riktning.
* [StaticBody2D](https://docs.godotengine.org/en/stable/tutorials/physics/physics_introduction.html#staticbody2d) - En fysisk kropp som inte rör på sig genom kollision. Men kan röra sig linjärt och vertikalt, dvs för att skapa rörliga platformar och rörliga fiender.
* [Area2D](https://docs.godotengine.org/en/stable/tutorials/physics/physics_introduction.html#area2d): Använder vi för att få en signla att spelaren kört på något eller ut ur något, utan att krocken ska ha fysikalisk påverkan. T.ex. om spelaren ska köra på ett mynt och plocka upp, eller träffas av ett skott.
* [CharacterBody2D](https://docs.godotengine.org/en/stable/tutorials/physics/using_character_body_2d.html): Vår spelare ska vara en Characterbody2D. Den kan krocka och studsa och vi kan med kod ändra dess hastighet och/eller position direkt. Sedan anropar vi antingen metoden [`move_and_slide`](https://docs.godotengine.org/en/stable/tutorials/physics/physics_introduction.html#move-and-slide) eller [`move_and_collide`](https://docs.godotengine.org/en/stable/tutorials/physics/physics_introduction.html#move-and-collide) för att beräkna den fysiska simuleringen. Man kan se det som att vi föreslår en ny hastighet eller position, och att simuleringen sedan räknar ut vad det blir. slide - simulerar med att spelaren följer ytor, collide - simulerar att spelaren krockar med ytor som en boll/kula
* [CollisionShape](https://docs.godotengine.org/en/stable/tutorials/physics/physics_introduction.html#collision-shapes) - Varje fysikalisk kropp har ett eller fler barn som beskriver den geometriska form som påverkar det fysikaliska systemet. Detta för att vi ska kunna ha en väldigt komplex Sprite2D, men en enklare kollisionsform. I kursen använder vi CollisionPolygon2D som vi kan skapa direkt från bilder och få bra former.
## Särskilda egenskaper/attribut (variabler på objekt)
* `.global_position`: Alla objekt har positioner både lokalt och i det globala koordinatsystemet. Vi behöver alltså inte räkna ut det, utan kan direkt kolla var objekt är med denna Vector2.
* `.global_rotation_degree`: En kropps rotation i grader. Går konstigt nog från -180 till 180 ocvh snurrar där runt.
* `.linear_velocity`: Den hastighet en fysisk kropp färdas med (Vector2). x är positivt åt höger, y är positivt nedåt
* `delta` : argument i `_physics_process` och `_process`. Den mängd tid som gått sedan förra gången funktionen anropats. För att hålla rätt fart multiplicerar vi en konstant med detta värde om vi t.ex. ska öka spelarens hastighet. konstant fart vill vi Vi multiplacerar krafter och steg med delta för att få en tidsoberoende effekter t.ex. för olika snabba datorer eller om datorn har lite olika prestanda när den också gör annat samtidigt som spelet körs.
* `visible`: Alla noder som är grafiska har denna egenskap. Om den är `false` blir noden osynlig. En bool
Sidansvarig: infomaster
Senast uppdaterad: 2025-04-23