2.5 Krišana un lēkšana
Stundas uzdevums: Pievieno lēcienu ar Space. Inspector panelī pielāgo lēcienu, lai varētu sasniegt atslēgu.
80 min plāns: Ievads (~10 min) · gravitācija (~20 min) · lēciens (~25 min) · maršruta pārbaude (~20 min) · saglabāšana (~5 min).
Pirms sāc: turpini 2.4 līmeni. Punktu un atslēgas kods paliek Player.cs failā. Ar virzienu taustiņiem tagad kustēsimies tikai pa kreisi un pa labi; W/S vairs nekustinās varoni.
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.
Trīs lauki, ar kuriem mainīsi kustību
Pēc koda papildināšanas un Build nospiešanas Level1 cilnē atlasi Player. Inspector redzēsi:
| Lauks | Sākuma vērtība | Ko tas maina |
|---|---|---|
| Speed | 300 | Ātrumu pa kreisi un pa labi. |
| Gravity | 1200 | Cik strauji varonis sāk krist. Lielāks skaitlis velk lejup stiprāk. |
| Jump Velocity | -550 | Lēciena spēku. Piemēram, -650 dod augstāku lēcienu nekā -550. |
Godot virziens uz leju ir pozitīvs, uz augšu — negatīvs. Tāpēc lēciena skaitlim priekšā vajag mīnusu. IsOnFloor() pārbauda, vai varonis stāv uz grīdas vai platformas.
1. uzdevums -
Liec varonim nokrist uz grīdas
- FileSystem → Scripts atver
Player.cs. ZemSpeedrindas pievieno[Export] public float Gravity = 1200.0f;un jaunā rindā[Export] public float JumpVelocity = -550.0f;.[Export]ļauj šos skaitļus mainīt Inspector panelī. - Esošo
_PhysicsProcessdaļu no tās pirmās rindas līdz aizverošajai}aizstāj ar kodu zemāk. Pārējo failu saglabā: tas joprojām skaita punktus un atceras atslēgu. - Saglabā un nospied Build. Atver
Level1, Scene panelī atlasiPlayer. Inspector pārbaudi Speed =300, Gravity =1200, Jump Velocity =-550. Sadaļā Transform → Position iestati(80,570). - Saglabā un nospied F5. Varonim jānokrīt līdz grīdai un jāpaliek uz tās. A/D kustina pa kreisi un pa labi; W/S vairs nekustina augšup un lejup.
public override void _PhysicsProcess(double delta)
{
if (!IsActive)
{
Velocity = Vector2.Zero;
return;
}
Vector2 velocity = Velocity;
if (!IsOnFloor())
velocity.Y += Gravity * (float)delta;
// Nākamajā uzdevumā šeit pievienosi lēcienu.
velocity.X = Input.GetAxis("move_left", "move_right") * Speed;
Velocity = velocity;
MoveAndSlide();
}
Gatavs, kad: varonis nokrīt uz grīdas un kustas pa kreisi un pa labi.
2. uzdevums -
Pievieno vienu lēcienu no zemes
- Atver
Player.cs. Rindas// Nākamajā uzdevumā šeit pievienosi lēcienu.vietā ievieto divas koda rindas zemāk. - Saglabā, nospied Build un F5. Kad varonis stāv uz grīdas, nospied Space: tam jālec augšup un jāpiezemējas.
- Turi Space nospiestu: lēcienam nav jāatkārtojas. Nospied Space vēlreiz gaisā: otram lēcienam nav jānotiek.
- Apturi spēli. Level1 cilnē atlasi
Playerun Inspector laukā Jump Velocity izmēģini-400, tad-650. Pēc katras maiņas palaid spēli un salīdzini augstumu. Beigās atjauno -550. Inspector ievadītais skaitlis ir tas, ko spēle izmantos.
if (Input.IsActionJustPressed("jump") && IsOnFloor())
velocity.Y = JumpVelocity;
2.5 Player.cs ar kustību, lēcienu un punktiem — pilns fails
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 enum PickupType { Coin, Gem, Key }
public partial class Player : CharacterBody2D
{
[Export] public float Speed = 300.0f;
[Export] public float Gravity = 1200.0f;
[Export] public float JumpVelocity = -550.0f;
public int Score { get; private set; } = 0;
public bool HasKey { get; private set; } = false;
public bool IsActive { get; set; } = true;
public override void _PhysicsProcess(double delta)
{
if (!IsActive)
{
Velocity = Vector2.Zero;
return;
}
Vector2 velocity = Velocity;
if (!IsOnFloor())
velocity.Y += Gravity * (float)delta;
if (Input.IsActionJustPressed("jump") && IsOnFloor())
velocity.Y = JumpVelocity;
velocity.X = Input.GetAxis("move_left", "move_right") * Speed;
Velocity = velocity;
MoveAndSlide();
}
public void OnPickup(PickupType type)
{
if (!IsActive) return;
switch (type)
{
case PickupType.Coin:
Score += 1;
break;
case PickupType.Gem:
Score += 5;
break;
case PickupType.Key:
HasKey = true;
break;
}
GD.Print($"Punkti: {Score}; atslēga: {HasKey}");
}
}
Gatavs, kad: varonis lec augšup, piezemējas un nevar atkārtoti lēkt gaisā.
3. uzdevums -
Izveido pārvaramu ceļu līdz atslēgai
- Nospied F5 un ar D un Space sasniedz Platform1, Platform2 un Platform3. Uz pēdējās savāc Key. Pirmajai platformai lec pretī jau no sākuma vietas: tieši zem tās varonis atsitīsies pret apakšu.
- Ja platformu nevar sasniegt, apturi spēli. Scene panelī atlasi šo platformu un Inspector sadaļā Transform → Position pārvieto to tuvāk vai zemāk. Lielāks y skaitlis pārvieto platformu uz leju. Maini vienu platformu reizē un uzreiz izmēģini lēcienu.
- Pārbaudi, ka vari savākt arī visas monētas un Gem. Tad izmēģini noiet aiz grīdas malas. Pagaidām atgriezies sākumā ar Stop (F8) un Run Project (F5); nākamajā stundā tam pievienosi R.
- Uzņem Inspector ekrānuzņēmumu ar Player laukiem Speed, Gravity un Jump Velocity. Saglabā īsu video, kurā sasniedz atslēgu. README.md pieraksti, kādu atšķirību redzēji starp -400 un -650.
Gatavs, kad: atslēga un visi punktu priekšmeti ir sasniedzami ar A/D un Space; projektā paliek strādājošas, pārbaudītas vērtības.
Papildu uzdevums — īss un garš lēciens
Vispirms saglabā strādājošo versiju Git. Zem JumpVelocity rindas pievieno private double coyote = 0.0;. Abas lēciena rindas no 2. uzdevuma aizstāj ar kodu zemāk. Tas ļaus lēkt zemāk, ja ātri atlaidīsi Space, un vēl 0,1 sekundi pēc platformas malas šķērsošanas. Pēc lēciena laiku atjauno uz 0, lai nevarētu lēkt vēlreiz gaisā.
if (IsOnFloor()) coyote = 0.1;
else coyote = System.Math.Max(0.0, coyote - delta);
if (Input.IsActionJustPressed("jump") && coyote > 0.0)
{
velocity.Y = JumpVelocity;
coyote = 0.0;
}
if (Input.IsActionJustReleased("jump") && velocity.Y < 0)
velocity.Y *= 0.5f;
Pārbaudi īsu un ilgu Space piespiedienu, lēcienu uzreiz pēc malas un divus ātrus nospiedienus gaisā. Otrs lēciens nedrīkst izdoties. Vēlreiz pārbaudi, ka ceļš līdz atslēgai ir pārvarams.
Ko sagatavo
Stundas mērķis: varonis lec pa platformām un var savākt atslēgu.
GitHub krātuvē jābūt:
Player.csar vienu _PhysicsProcess, gravitāciju, lēcienu un OnPickup.- Inspector ekrānuzņēmums, video ar ceļu līdz atslēgai un README.md novērojums par lēciena augstumu.
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īme | Ko pārbaudīt |
|---|---|
| Gravitācija nedarbojas | Level1 cilnē atlasi Player un pārbaudi, ka Gravity ir 1200. Ja W/S joprojām kustina varoni, Player.cs vēl ir vecais kustības kods. |
| Varonis nelec no grīdas | Atlasi Player: Motion Mode jābūt Grounded, Up Direction (0,-1), Collision → Mask tikai 1. Input Map pārbaudi jump → Space. Zem Ground pārbaudi CollisionShape2D formu. |
| Lēciens pēkšņi mainījies | Level1 cilnē atlasi Player. Inspector laukā Jump Velocity atjauno -550; pārbaudi arī Gravity = 1200. |
| Pēc jaunā koda nav punktu | Salīdzini Player.cs ar pilno failu šajā stundā. Tajā jāpaliek arī OnPickup daļai, kas skaita punktus. |