ebSkola

2.2 Vadi varoni ar taustiņiem

Stundas uzdevums: Input Map cilnē pievieno taustiņus un izveido varoni, kuru vari vadīt ar WASD un bultiņām.

SR 2.4.14. Vadības struktūras SR 2.4.7. UI

80 min plāns: Ievads (~10 min) · Input Map (~20 min) · spēlētāja scēna (~25 min) · kustības pārbaude (~20 min) · saglabāšana (~5 min).

Pirms sāc: turpini Platformer projektu no 2.1. MovementLab.tscn paliek kā eksperiments; spēlei izveidosim atsevišķus Player.tscn un Level1.tscn.

Pēc izmaiņām: saglabā failus. Ja mainīji C# kodu, Godot augšējā labajā stūrī nospied Build (āmura ikona). Tad palaid spēli. Pirms nākamā uzdevuma izlabo pirmo parādīto kļūdu.

Kur šodien klikšķināsi

Input Map cilnē katrai darbībai pievienosi taustiņus. Piemēram, move_left nozīmēs kustību pa kreisi gan ar A, gan ar ←.

Scene panelī veidosi Player ar divām daļām: Visual parāda varoni, bet CollisionShape2D nosaka, kur varonis atduras pret šķērsli. Pašus šķēršļus pievienosim 2.4 stundā.

Šodien varonis var kustēties četros virzienos. Vēlāk kustību uz augšu un leju aizstāsim ar lēcienu un krišanu. Godot paneļu un pogu atgādne.

1. uzdevums -

Input Map cilnē pievieno taustiņus

  1. Augšā atver Project → Project Settings un izvēlies cilni Input Map.
  2. Laukā Add New Action ieraksti move_left un spied Add. Sarakstā parādās jauna rinda.
  3. Šīs rindas labajā pusē spied +. Laukā Listening for Input… nospied tastatūras A un apstiprini ar OK. Tajā pašā rindā vēlreiz spied + un pievieno ←.
  4. Tāpat pievieno pārējās tabulas rindas. Nosaukumus raksti precīzi, ar mazajiem burtiem. jump un restart izmantosim vēlāk.
  5. Izvērs rindas un pārbaudi piesaistītos taustiņus. Uzņem Input Map ekrānuzņēmumu, tad aizver iestatījumu logu.
DarbībaTaustiņi
move_leftA un ←
move_rightD un →
move_upW un ↑ (eksperimentam)
move_downS un ↓ (eksperimentam)
jumpSpace
restartR

Gatavs, kad: ir visas sešas darbības ar tabulā norādītajiem taustiņiem.

2. uzdevums -

Izveido spēlētāju un līmeni

  1. Izvēlies Scene → New Scene, tad Other Node. Meklē CharacterBody2D un spied Create. Ar F2 nosauc to Player. Ar Ctrl+S saglabā mapē Scenes kā Player.tscn.
  2. Atlasi Player. Inspector sadaļā Transform atstāj Position = (0,0) un Scale = (1,1).
  3. Ar + pievieno Polygon2D, nosauc to Visual. Inspector sadaļā Data → Polygon ievadi četrus punktus tāpat kā 2.1 stundā: (-16,-24), (16,-24), (16,24), (-16,24). Laukā Color izvēlies gaišu krāsu.
  4. Atkal atlasi Player un ar + pievieno CollisionShape2D. Inspector laukā Shape atver izvēlni → New RectangleShape2D. Noklikšķini uz izveidotās formas un laukā Size ievadi (32,48). Visual un CollisionShape2D laukam Position jābūt (0,0).
  5. Atlasi Player. Inspector atver Collision. Rindā Layer atstāj ieslēgtu tikai kvadrātiņu 2, rindā Mask — tikai 1. Laukā Motion Mode atstāj Grounded.
  6. Ar labo peles pogu uz Player → Attach Script. Izvēlies C# un ceļu res://Scripts/Player.cs. Spied Create, atver failu C# redaktorā un aizstāj saturu ar pilno kodu zemāk. Saglabā kodu un scēnu.
  7. Izvēlies Scene → New Scene → 2D Scene, nosauc to Level1 un saglabā Scenes/Level1.tscn. No FileSystem ievelc Player.tscn uz Level1 Scene panelī. Izvēlies pievienoto Player un Inspector sadaļā Transform → Position ievadi (80,570).
  8. Nospied Build. FileSystem panelī ar labo peles pogu uz Level1.tscn → Set as Main Scene. Nospied augšējo Run Project (F5) pogu. Noklikšķini spēles logā un izmēģini W/A/S/D un bultiņas.
2.2 Player.cs — pilns fails salīdzināšanai

Lejupielādēt Player.cs. Atver esošo tāda paša nosaukuma failu un aizstāj tā saturu ar šo kodu.

using Godot;

public partial class Player : CharacterBody2D
{
    [Export] public float Speed = 300.0f;

    public override void _PhysicsProcess(double delta)
    {
        Vector2 direction = Vector2.Zero;
        if (Input.IsActionPressed("move_left")) direction.X -= 1;
        if (Input.IsActionPressed("move_right")) direction.X += 1;
        if (Input.IsActionPressed("move_up")) direction.Y -= 1;
        if (Input.IsActionPressed("move_down")) direction.Y += 1;

        Velocity = direction.Normalized() * Speed;
        MoveAndSlide();
    }
}

Gatavs, kad: F5 palaiž Level1, varonis pārvietojas un apstājas, atlaižot taustiņus.

3. uzdevums -

Izmēģini taustiņus un maini Speed

  1. Palaid ar F5. Izmēģini A/D, W/S un bultiņas. Atlaižot taustiņus, varonim jāapstājas. Turot A un D reizē, tas nekustas pa labi vai pa kreisi.
  2. Apturi ar F8. Level1 cilnē atlasi Player un Inspector laukā Speed izmēģini 150 un 450. Pēc katras izmaiņas palaid spēli un salīdzini. Beigās atjauno 300.
  3. Kodā uz laiku aizstāj direction.Normalized() * Speed ar direction * Speed. Saglabā, nospied Build un izmēģini D+S reizē: pa diagonāli varonis pārvietojas ātrāk. Atjauno Normalized(), vēlreiz saglabā un nospied Build.
  4. Normalized() palīdz saglabāt vienādu ātrumu arī pa diagonāli. MoveAndSlide() jau ņem vērā laiku, tāpēc Velocity šeit papildus ar delta nereizina.
  5. README.md ieraksti vadības taustiņus un vienu novērojumu par mainīto ātrumu. Ja varonis iziet ārpus ekrāna, apturi un palaid spēli no jauna.

Gatavs, kad: darbojas WASD un bultiņas, kodā atjaunots Normalized() un Speed ir 300.

Papildu uzdevums — skriešanas taustiņš

Atver Project → Project Settings → Input Map. Pievieno run rindu un ar + tai piesaisti Shift. Pirms Velocity piešķiršanas aprēķini float currentSpeed = Input.IsActionPressed("run") ? Speed * 1.5f : Speed; un kustībai izmanto currentSpeed. Pārbaudi arī diagonāli.

Ko sagatavo

Stundas mērķis: ir viena Player scēna un viens Player.cs, kuru papildināsi nākamajās stundās.

GitHub krātuvē jābūt:

  1. Player.tscn, Level1.tscn, Player.cs, Input Map ekrānuzņēmums.
  2. README.md: vadības taustiņi un novērojums par ātruma maiņu.

Saglabā visu projektu: project.godot, .csproj, scēnas, skriptus un izmantotos attēlus. .gitignore ieraksti .godot/, bin/ un obj/ katru savā rindā.

Kā iesniedz: saglabā izmaiņas Git un nosūti tās uz GitHub tāpat kā 1. tēmā (commit un push). Skolotāja norādītajā vietā iesniedz GitHub krātuves saiti; README.md un pārbaudes pierādījumiem jābūt krātuvē.

Ja kaut kas nestrādā

PazīmeKo pārbaudīt
F5 rāda veco eksperimentuFileSystem ar labo pogu uz Level1.tscn → Set as Main Scene.
Varonis nekustasNoklikšķini spēles logā. Project → Project Settings → Input Map pārbaudi nosaukumus un taustiņus. Scene panelī pie Player jābūt Player.cs skriptam.
Ļoti lēna kustībaPirms MoveAndSlide ātrumu nedrīkst vēlreiz reizināt ar delta.
Forma nav redzama spēlēScene panelī atlasi Visual un pārbaudi Color un Data → Polygon. CollisionShape2D spēles laikā nav redzams.