Stundas uzdevums: Saprast atšķirību starp std::vector un Godot Array, izvēlēties piemēroto datu struktūru.
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ļā.
Godot C++ kontekstā ir divas saraksta opcijas:
| Tips | Lietojums | Piemērs |
|---|---|---|
std::vector<T> | Iekšējais C++ kods, ātrs | std::vector<Enemy*> enemies; |
Array | Komunikācijai ar Godot | Array bullets; |
TypedArray<T> | Tipa-droša Godot Array | TypedArray<Bullet> bullets; |
#include <vector>
std::vector<Enemy*> enemies;
enemies.push_back(new Enemy());
for (auto e : enemies) e->update();
enemies.erase(enemies.begin() + 2); // dzēš 3.
// Godot Array
Array bullets;
bullets.append(new_bullet);
bullets.size();
bullets.pop_back();
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: C++ kodā pamatoti izvēlēti vector/map/set, AI stāvokļi ir skaidri, un sarežģītākas sistēmas var profilēt vai atkļūdot.
#include <godot_cpp/variant/string.hpp>
using namespace godot;
struct AiDataCheckpoint {
String lesson = "4.1 Vector un Array";
bool uses_cpp = true;
bool chooses_container = true;
bool separates_ai_state = true;
bool handles_removal_safely = 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 4.1 Vector un Array; 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 AiDataCheckpoint {
String lesson = "4.1 Vector un Array";
bool uses_cpp = true;
bool chooses_container = true;
bool separates_ai_state = true;
bool handles_removal_safely = 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 <godot_cpp/variant/utility_functions.hpp>
std::vector<Enemy*> enemies;
void spawn_enemy() {
Enemy* e = memnew(Enemy);
add_child(e);
e->set_position(Vector2(UtilityFunctions::randf_range(0.0, 1280.0), 0));
enemies.push_back(e);
}
void Game::_physics_process(double delta) {
spawn_timer += delta;
if (spawn_timer >= 2.0) {
spawn_enemy();
spawn_timer = 0;
}
// Noņem mirušos
enemies.erase(
std::remove_if(enemies.begin(), enemies.end(),
[](Enemy* e) { return !e->is_alive(); }),
enemies.end());
}