Stundas uzdevums: Izmantot if/else, switch un cikli spēles uzvedības loģikā.
Pirms sāc: izmanto iepriekš apgūto un šīs lapas teorijas/koda piemērus. Ja vajadzīga jauna komanda vai rīks, vispirms atrodi tās paraugu teorijas sadaļā.
C++ vadības struktūras ir gandrīz identiskas Python ekvivalentiem, bet ar atšķirīgu sintaksi:
// If / else if / else
if (player->health <= 0) {
player->die();
} else if (player->health < 30) {
play_warning_sound();
} else {
show_normal_status();
}
// Switch (kā Python match-case)
switch (state) {
case PlayerState::IDLE: play_idle(); break;
case PlayerState::RUNNING: play_run(); break;
case PlayerState::JUMPING: play_jump(); break;
default: break;
}
// For cikls
for (int i = 0; i < enemies.size(); i++) {
enemies[i]->update();
}
// Range-based for (C++11+)
for (Enemy* e : enemies) {
e->update();
}
// While
while (health > 0 && level_active) {
process_combat();
}
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: spēlētājs, objekti un sadursmes darbojas ar C++ klasēm, kas lieto _physics_process, Input, CharacterBody2D, Area2D vai move_and_slide.
#include <godot_cpp/variant/string.hpp>
using namespace godot;
struct PhysicsCheckpoint {
String lesson = "2.3 Vadības struktūras spēles loģikā";
bool uses_cpp = true;
bool uses_physics_process = true;
bool uses_delta_time = true;
bool checks_collisions = true;
};
Šis ir īss iesildīšanās uzdevums. Nokopē sagatavi, ielīmē to pareizajā koda vietā un palaid. Šeit pietiek droši izmēģināt tēmu 2.3 Vadības struktūras spēles loģikā; detalizētu izpratni veidosi nākamajos uzdevumos.
Kopējamais piemērs vai sagatave: izmanto šo bloku kā starta punktu, nevis kā gala risinājumu.
#include <godot_cpp/variant/string.hpp>
using namespace godot;
struct PhysicsCheckpoint {
String lesson = "2.3 Vadības struktūras spēles loģikā";
bool uses_cpp = true;
bool uses_physics_process = true;
bool uses_delta_time = true;
bool checks_collisions = true;
};
.cpp vai .hpp failā pie šīs stundas klases.Pievieno šīs stundas paņēmienu kā nelielu, strādājošu spēles mehānikas daļu.
PlayerState, velocity, score vai update_ui()._ready(), _process(), _physics_process(), signāla apstrādātāja vai projekta palīgklases.Pārbaudi, vai C++ algoritms darbojas paredzami spēles vidē.
Ja pamatdarbs ir pabeigts, paplašini spēli ar vienu nelielu C++ uzlabojumu.
#include <vector> un namespace.break; - kods iet uz nākamo case.
enum class PickupType { COIN, GEM, KEY };
void Player::on_pickup(PickupType type) {
switch (type) {
case PickupType::COIN:
score += 1;
UtilityFunctions::print("Coin! Score: ", score);
break;
case PickupType::GEM:
score += 5;
UtilityFunctions::print("Gem! Score: ", score);
break;
case PickupType::KEY:
has_key = true;
UtilityFunctions::print("Got the key!");
break;
}
if (score >= 100) {
UtilityFunctions::print("Level complete!");
}
}