ebSkola

6.1 UI elementi un Control nodes

Stundas uzdevums: Izveidot lietotāja saskarni ar Godot Control nodes - Button, Label, Container.

SR 2.4.7. Lietotāja saskarne (UI) SR 2.4.15. Modulāras programmas

80 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~20 min) - uzbūvē sākuma izvēlni · 2. uzdevums (~25 min) - savieno pogas ar kodu · 3. uzdevums (~20 min) - pievieno enkurus un pārbaudi izmērus · Iesniegšana (~5 min).

Pirms sāc: atver savu projektu. UI Godot lieto Control mezglus, nevis Node2D - tiem ir enkuri un konteineri, kas paši kārto elementus.

Teorija: Control nodes hierarhija

Godot UI sistēma izmanto Control nodes, kas atšķiras no Node2D - tām ir layout, anchors, theme.

NodeLietojums
LabelTeksts (statisks)
ButtonKlikšķināmā poga
LineEditSingle-line input
TextEditMulti-line input
VBoxContainerVertikāls izvietojums
HBoxContainerHorizontāls izvietojums
GridContainerGrid layout
PanelContainerBackground ar borderiem
// Button signal
Button button = GetNode<Button>("StartButton");
button.Pressed += OnStartPressed;

private void OnStartPressed()
{
    GetTree().ChangeSceneToFile("res://game.tscn");
}

Kā šo izmantot projektā

Atceries: ar redzamu efektu editorā nepietiek. Paskaidro, kura C# klase glabā stāvokli, kura metode to maina un kā Godot node struktūra izmanto šo kodu.

Pārbaudi: UI signāli, audio darbības, debug izvade un publicēšanas sagatave ir sasaistīta ar C# spēles stāvokli.

public class PolishCheckpoint
{
    public string Lesson = "6.1 UI elementi un Control nodes";
    public bool UsesCSharp = true;
    public bool ConnectsUiSignals = true;
    public bool RoutesAudioEvents = true;
    public bool VerifiesExportBuild = true;
}

Praktiskie uzdevumi

1. uzdevums -

Uzbūvē sākuma izvēlni

Beigās tavai spēlei būs sākuma ekrāns ar trim pogām.

  1. Izveido jaunu scēnu ar Control sakni un nosaukumu Menu.
  2. Pievieno tai bērnu VBoxContainer.
  3. Pievieno konteinerā Label ar spēles nosaukumu.
  4. Pievieno trīs Button mezglus: Sākt, Iestatījumi, Iziet.
  5. Ievēro, ka konteiners pats sakārto pogas vienu zem otras.
  6. Pievieno konteinerā atstarpi ar Theme Overrides -> Separation.
  7. Palaid scēnu un pārbaudi, ka visas pogas ir redzamas.

Gatavs, kad: ekrānā ir virsraksts un trīs pogas vienu zem otras ar vienādām atstarpēm.

2. uzdevums -

Savieno pogas ar kodu

Beigās pogas tiešām kaut ko darīs.

  1. Izveido C# klasi MainMenu, kas manto no Control.
  2. Pievieno metodi private void OnStartPressed().
  3. Paņem pogu ar Button startButton = GetNode<Button>("VBox/StartButton");.
  4. Savieno _Ready metodē pogas signālu ar startButton.Pressed += OnStartPressed;.
  5. Ielādē apstrādātājā spēles scēnu ar GetTree().ChangeSceneToFile("res://game.tscn");.
  6. Savieno arī Iziet pogu ar GetTree().Quit();.
  7. Būvē un pārbaudi abas pogas.

Gatavs, kad: Sākt poga atver spēles scēnu, un Iziet poga aizver spēli.

3. uzdevums -

Pievieno enkurus un pārbaudi izmērus

Beigās izvēlne izskatīsies pareizi jebkurā loga izmērā.

  1. Izvēlies VBoxContainer un atver Layout -> Anchors Preset.
  2. Izvēlies Center, lai konteiners paliktu ekrāna vidū.
  3. Palaid spēli un mainiet loga izmēru ar peli.
  4. Pieraksti, vai izvēlne palika centrā.
  5. Nomaini enkuru uz Top Left un atkārto testu.
  6. Pieraksti, kas mainījās.
  7. Ieliec Center atpakaļ un saglabā scēnu.

Gatavs, kad: mainot loga izmēru, izvēlne paliek centrā, bet ar Top Left enkuru tā aizbēg uz stūri.

Papildu uzdevums - Pievieno iestatījumu logu

Ja pamatdarbs ir gatavs, uztaisi otro ekrānu.

  1. Izveido PanelContainer ar nosaukumu Settings.
  2. Pievieno tam skaļuma slīdni HSlider.
  3. Paslēp to sākumā ar settings.Visible = false;.
  4. Parādi to, nospiežot Iestatījumu pogu.
  5. Pievieno Atpakaļ pogu, kas to atkal paslēpj.

Gatavs, kad: Iestatījumu logs parādās un pazūd ar pogām, neizejot no izvēlnes.

Ko sagatavo

Stundas mērķis: Tavai spēlei ir sākuma izvēlne ar trim pogām Control mezglos, pogas ir savienotas ar C# kodu caur signāliem, un izvēlne paliek centrā, mainot loga izmēru.

GitHub krātuvē jābūt:

  1. Fails MainMenu.cs ar pogu signālu savienojumiem.
  2. README.md ievietota video saite vai divi ekrānuzņēmumi krātuvē: izvēlne un tas, kas notiek, nospiežot Sākt.
  3. Ekrānuzņēmums ar izvēlni pēc loga izmēra maiņas.
  4. README.md: ar ko Control mezgli atšķiras no Node2D.

Kā iesniedz: Veic commit un push. Skolotāja norādītajā vietā ievieto tikai GitHub krātuves saiti; visiem prasītajiem failiem, README.md pierakstiem un pierādījumiem jābūt pašā krātuvē.

Biežākās kļūdas

  • Button signal nestrādā: Pārbaudi, vai Pressed += izsaukums notiek _Ready metodē un mezgla ceļš ir pareizs.
  • UI elementi pārklājas: Lieto Container nodes layout management.
  • Anchors confusing: Layout → Set Anchors and Offsets to Preset → Top Wide vai Center.

Godot ekrānuzņēmumi

Sākuma menu ekrāns: tumšs fons, spēles logo augšā, 4 baltas pogas (Sākt, Iestatījumi, Augstākie rezultāti, Iziet) centrā.
Sākuma menu ekrāns: tumšs fons, spēles logo augšā, 4 baltas pogas (Sākt, Iestatījumi, Augstākie rezultāti, Iziet) centrā.
Iestatījumu ekrāns: 3 sadaļas - Audio (Volume slider), Display (Fullscreen checkbox), Gameplay (Difficulty dropdown).
Iestatījumu ekrāns: 3 sadaļas - Audio (Volume slider), Display (Fullscreen checkbox), Gameplay (Difficulty dropdown).
Spēles HUD: HP bāris kreisajā augšā, Score 1240 centrā, Mini-map labajā augšā, ability cooldown indikatori apakšā.
Spēles HUD: HP bāris kreisajā augšā, Score 1240 centrā, Mini-map labajā augšā, ability cooldown indikatori apakšā.

Koda piemērs (paplašināts)

using Godot;

public partial class Menu : Control
{
    public override void _Ready()
    {
        Button startBtn = GetNode<Button>("VBox/StartButton");
        Button settingsBtn = GetNode<Button>("VBox/SettingsButton");
        Button quitBtn = GetNode<Button>("VBox/QuitButton");

        startBtn.Pressed += OnStart;
        settingsBtn.Pressed += OnSettings;
        quitBtn.Pressed += OnQuit;
    }

    private void OnStart()
    {
        GetTree().ChangeSceneToFile("res://game.tscn");
    }

    private void OnSettings()
    {
        GetTree().ChangeSceneToFile("res://settings.tscn");
    }

    private void OnQuit()
    {
        GetTree().Quit();
    }
}
Sākuma menu ar 4 stilizētām pogām, hover efekti, navigācija starp ekrāniem.