Stundas uzdevums: Padarīt savu C++ klasi pilnvērtīgi izmantojamu Godot editor (ar Inspector īpašībām).
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ļā.
Lai C++ klase parādītos Godot editor un tās laukus varētu rediģēt Inspector, jāizmanto GDCLASS makro un jāreģistrē properties.
class Obstacle : public CharacterBody2D {
GDCLASS(Obstacle, CharacterBody2D)
private:
int energy = 50;
float speed = 100.0f;
String obstacle_name = "PrinterQueue";
protected:
static void _bind_methods() {
ClassDB::bind_method(D_METHOD("get_energy"), &Obstacle::get_energy);
ClassDB::bind_method(D_METHOD("set_energy", "v"), &Obstacle::set_energy);
// Padari property redzamu Inspector
ADD_PROPERTY(PropertyInfo(Variant::INT, "energy"), "set_energy", "get_energy");
ClassDB::bind_method(D_METHOD("get_speed"), &Obstacle::get_speed);
ClassDB::bind_method(D_METHOD("set_speed", "v"), &Obstacle::set_speed);
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "speed"), "set_speed", "get_speed");
}
public:
int get_energy() const { return energy; }
void set_energy(int v) { energy = v; }
float get_speed() const { return speed; }
void set_speed(float v) { speed = v; }
};
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: katrai būtiskai turnīra lomai ir C++ klase ar header/implementation dalījumu, konstruktoriem, metodēm, signāliem vai mantošanu.
#include <godot_cpp/variant/string.hpp>
using namespace godot;
struct OopCheckpoint {
String lesson = "3.4 Custom GDExtension klases editor redzamas";
bool uses_cpp = true;
bool has_header_file = true;
bool has_single_responsibility = true;
bool uses_godot_registration = 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 3.4 Custom GDExtension klases editor redzamas; 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 OopCheckpoint {
String lesson = "3.4 Custom GDExtension klases editor redzamas";
bool uses_cpp = true;
bool has_header_file = true;
bool has_single_responsibility = true;
bool uses_godot_registration = 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.
class Obstacle : public CharacterBody2D {
GDCLASS(Obstacle, CharacterBody2D)
private:
int energy = 50;
float speed = 100.0f;
public:
int get_energy() const { return energy; }
void set_energy(int v) { energy = std::max(0, v); }
float get_speed() const { return speed; }
void set_speed(float v) { speed = std::max(0.0f, v); }
protected:
static void _bind_methods() {
ClassDB::bind_method(D_METHOD("get_energy"), &Obstacle::get_energy);
ClassDB::bind_method(D_METHOD("set_energy", "v"), &Obstacle::set_energy);
ADD_PROPERTY(PropertyInfo(Variant::INT, "energy",
PROPERTY_HINT_RANGE, "0,500"), "set_energy", "get_energy");
ClassDB::bind_method(D_METHOD("get_speed"), &Obstacle::get_speed);
ClassDB::bind_method(D_METHOD("set_speed", "v"), &Obstacle::set_speed);
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "speed",
PROPERTY_HINT_RANGE, "0,500,0.1"), "set_speed", "get_speed");
}
};