ebSkola

2.4 Platformas un savācamie priekšmeti

Stundas uzdevums: Izveido grīdu, trīs platformas un priekšmetus, kas pazūd, kad varonis tiem pieskaras.

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

80 min plāns: Ievads (~10 min) · grīda un platformas (~20 min) · priekšmeti (~25 min) · sadursmju pārbaudes (~20 min) · saglabāšana (~5 min).

Pirms sāc: atver savu Level1.tscn un izmanto 2.3 stundas Player.cs. Pagaidu _Ready() pārbaudei jābūt izdzēstai. Šodien vēl kustamies četros virzienos, lai ērti pārbaudītu visu laukumu.

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.

Ko izvēlēties un kur likt ķeksīšus

Grīdai un platformām izvēlies StaticBody2D: tas aptur varoni. Priekšmetiem izvēlies Area2D: varonis tiem var pieskarties un tos savākt.

Katram vajag divas daļas: Visual parāda izskatu, CollisionShape2D nosaka saskares vietu.

Scene panelī atlasi objektu un Inspector atver Collision. Rindā Layer atzīmē, kurai grupai objekts pieder. Rindā Mask — kuru grupu tas pamana. Klikšķini uz numurētajiem kvadrātiņiem pēc šīs tabulas; pārējos izslēdz.

Ko atlasi Scene panelīLayerMask
Ground, Platform1, Platform2, Platform3tikai 1neviens
Playertikai 2tikai 1
Pickup; vēlāk arī Finish un Hazardtikai 3tikai 2

Priekšmetam jābūt ieslēgtam arī Monitoring. Tad tas pamanīs varoni. Šos iestatījumus maini Inspector panelī.

1. uzdevums -

Uzbūvē grīdu un trīs sasniedzamas platformas

  1. FileSystem → Scenes ar dubultklikšķi atver Level1.tscn. Scene panelī atlasi Level1, spied +, meklē StaticBody2D un spied Create. Ar F2 nosauc to Ground. Inspector sadaļā Transform → Position ievadi (640,660).
  2. Atlasi Ground un ar + pievieno CollisionShape2D. Inspector laukā Shape izvēlies New RectangleShape2D. Klikšķini uz izveidotās formas un laukā Size ievadi (1280,40). Pašam CollisionShape2D atstāj Position = (0,0).
  3. Atkal atlasi Ground un ar + pievieno Polygon2D, nosauc to Visual. Inspector sadaļā Data → Polygon ievadi četrus punktus: (-640,-20), (640,-20), (640,20), (-640,20). Laukā Color izvēlies redzamu krāsu.
  4. Atlasi Level1 un tāpat izveido otru StaticBody2D ar nosaukumu Platform1. Tā Position = (280,560), Scale = (1,1). Pievieno CollisionShape2D ar taisnstūra Size = (160,20) un Visual ar punktiem (-80,-10), (80,-10), (80,10), (-80,10).
  5. Scene panelī ar labo peles pogu uz Platform1 → Duplicate. Kopiju nosauc Platform2 un iestati Position = (480,470). Izveido vēl vienu kopiju Platform3 ar Position = (680,380).
  6. Pēc kārtas atlasi grīdu, katru platformu un Player. Inspector sadaļā Collision atzīmē Layer un Mask pēc tabulas. Saglabā un nospied F5. Ar S mēģini iet grīdā, ar D — platformas sānos: varonim jāapstājas.

Ja maini kopijas izmēru: atlasi tās CollisionShape2D. Pie Shape atver izvēlni un spied Make Unique, tad maini Size. Tā pārējo kopiju formas paliks iepriekšējā izmērā. Pielāgo arī Visual punktus.

Gatavs, kad: varonis apstājas pie šķēršļiem un līmenī ir redzama grīda un trīs platformas.

2. uzdevums -

Izveido un savāc pirmo monētu

  1. Izvēlies Scene → New Scene → Other Node, meklē Area2D un spied Create. Nosauc to Pickup un saglabā Scenes/Pickup.tscn.
  2. Atlasi Pickup un ar + pievieno CollisionShape2D. Inspector laukā Shape izvēlies New CircleShape2D. Klikšķini uz izveidotās formas un iestati Radius = 12.
  3. Atkal atlasi Pickup un pievieno Polygon2D ar nosaukumu Visual. Sadaļā Data → Polygon ievadi četrus punktus: (0,-12), (12,0), (0,12), (-12,0). Laukā Color izvēlies dzeltenu krāsu.
  4. Atlasi Pickup. Inspector sadaļā Collision ieslēdz tikai Layer 3 un Mask 2. Pārbaudi, ka Monitoring ir ieslēgts.
  5. Ar labo peles pogu uz Pickup → Attach Script. Izvēlies C#, ceļu res://Scripts/Pickup.cs un spied Create. Aizstāj faila saturu ar kodu zemāk. Tas jau apstrādā pieskaršanos; Godot Signals panelī nekas papildus nav jāsavieno.
  6. Saglabā failu un scēnu, nospied Build. Atver Level1 cilni. No FileSystem ievelc Pickup.tscn uz Level1 Scene panelī. Pārdēvē pievienoto objektu par Coin1. Inspector iestati Position = (150,600) un laukā Type izvēlies Coin.
  7. Saglabā, nospied F5 un pieved varoni pie monētas. Tai jāpazūd. Apakšējā Output panelī jāparādās 1 punktam. Atgriezies tajā pašā vietā: otru punktu tā nedod.
2.4 Pickup.cs — pilns fails salīdzināšanai

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

using Godot;

public partial class Pickup : Area2D
{
    [Export] public PickupType Type = PickupType.Coin;
    private bool collected = false;

    public override void _Ready()
    {
        BodyEntered += OnBodyEntered;
    }

    private void OnBodyEntered(Node2D body)
    {
        if (collected || body is not Player player || !player.IsActive)
            return;

        collected = true;
        player.OnPickup(Type);
        QueueFree();
    }
}

Gatavs, kad: monēta pazūd, kad varonis tai pieskaras, un dod tieši 1 punktu.

3. uzdevums -

Kopē priekšmetus un izvēlies Type

  1. Level1 Scene panelī ar labo peles pogu uz Coin1 → Duplicate. Katru kopiju pārdēvē un Inspector laukos Position un Type ievadi tabulas vērtības. Maini izvēlēto kopiju Level1 cilnē.
  2. Lai atšķirtu Gem un Key, atlasi tos pa vienam un Inspector sadaļā Visibility → Modulate izvēlies atšķirīgas krāsas.
  3. Palaid ar F5 un savāc visus priekšmetus. Output jāparādās 9 punktiem un atslēga: True. Šodien augšējos priekšmetus vēl sasniedz ar W.
  4. Apturi spēli. Atlasi Coin1, sadaļā Collision → Mask izslēdz 2 un palaid vēlreiz. Monēta vairs nepazūd. Apturi un ieslēdz Mask 2 atpakaļ.
  5. Tāpat izmēģini Player laukā Mask izslēgt 1: varonis iet cauri platformām. Apturi un ieslēdz Mask 1 atpakaļ. Saglabā un vēlreiz pārbaudi gan platformas, gan savākšanu.
Nosaukums Scene panelīPositionType
Coin2(280,525)Coin
Gem(480,435)Gem
Coin3(600,600)Coin
Coin4(1050,600)Coin
Key(680,345)Key

Gatavs, kad: ir pieci punktu priekšmeti un atslēga; visi Mask ķeksīši ir atjaunoti un savākšana darbojas.

Papildu uzdevums — izveido savu priekšmeta simbolu

Atver Pickup.tscn, atlasi Visual un Inspector sadaļā Data → Polygon maini punktus. Atstāj Pickup un CollisionShape2D savās vietās. Pārbaudi, ka redzamais simbols un savākšanas zona atrodas vienā vietā.

Ko sagatavo

Stundas mērķis: varonis atduras pret platformām, savāc punktus un atslēgu.

GitHub krātuvē jābūt:

  1. Pickup.tscn, Pickup.cs un papildināts Level1.tscn.
  2. Video vai attēli ar sadursmi un savākšanas rezultātu; README.md skaidrojums par abām Mask pārbaudēm.

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
Monēta nepazūdScene panelī atlasi monētu: Inspector pārbaudi Collision → Mask 2 un Monitoring. Zem monētas jābūt CollisionShape2D ar Shape un Pickup.cs jāatbilst dotajam failam.
Pazūd, bet punkti nepieaugAtver Output un pārbaudi ziņas. Salīdzini Pickup.cs ar pilno kodu; tajā jābūt player.OnPickup(Type).
Nav Type izvēlnesSaglabā Pickup.cs, nospied Build un Scene panelī atlasi Coin1, nevis Visual vai CollisionShape2D.
Sadursme strādā tikai vienai kopijaiAtlasi nestrādājošo kopiju un pārbaudi Collision → Mask. Zem tās atlasi CollisionShape2D un pārbaudi Shape izmēru.