Stundas uzdevums: Apgūt Godot debugger, breakpoints, un izmantot to, lai atrastu bugs.
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 piedāvā vairākus rīkus problēmu atrašanai:
// Debugging C++ kodā
UtilityFunctions::print("Player position: ", get_position());
UtilityFunctions::printerr("Error: enemy is null!");
UtilityFunctions::push_warning("Suspicious value: ", value);
// Asserts
ERR_FAIL_NULL_MSG(player, "Player not found!");
ERR_FAIL_COND_MSG(hp < 0, "Negative HP!");
// Stack trace dump (debug builds)
#ifdef DEBUG_ENABLED
WARN_PRINT("Function called: " + String(__FUNCTION__));
#endif
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.
#include <godot_cpp/variant/string.hpp>
using namespace godot;
struct PolishCheckpoint {
String lesson = "6.4 Atkļūdošana un profilēšana";
bool uses_cpp = true;
bool connects_ui_signals = true;
bool routes_audio_events = true;
bool verifies_export_build = 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 6.4 Atkļūdošana un profilēšana; 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 PolishCheckpoint {
String lesson = "6.4 Atkļūdošana un profilēšana";
bool uses_cpp = true;
bool connects_ui_signals = true;
bool routes_audio_events = true;
bool verifies_export_build = 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.
scons target=template_debug.
// Defensīva programmēšana
void Player::take_damage(int amount) {
// Validate input
ERR_FAIL_COND_MSG(amount < 0,
"Damage amount must be non-negative, got: " + String::num_int64(amount));
// Log for debugging
UtilityFunctions::print("Player ", name, " taking ", amount,
" damage. Current HP: ", hp);
// Apply damage
hp = std::max(0, hp - amount);
// Sanity check
if (hp < 0) {
UtilityFunctions::printerr("CRITICAL: HP went negative! Resetting to 0");
hp = 0;
}
// Conditional debug
#ifdef DEBUG_ENABLED
if (hp == 0) {
UtilityFunctions::print("Player died at position ", get_position());
}
#endif
emit_signal("damaged", amount);
}