Stundas uzdevums: Apgūt FileAccess klasi un Godot failu sistēmu.
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ā FileAccess klasi failu lasīšanai un rakstīšanai. Tā strādā ar res:// (read-only resources) un user:// (lokālā lietotāja krātuve).
#include <godot_cpp/classes/file_access.hpp>
// Rakstīšana
Ref<FileAccess> file = FileAccess::open("user://save.txt", FileAccess::WRITE);
if (file.is_valid()) {
file->store_string("Hello, file!");
file->store_line("Otrā rinda");
file->store_32(42); // binary
file->close();
}
// Lasīšana
Ref<FileAccess> rfile = FileAccess::open("user://save.txt", FileAccess::READ);
if (rfile.is_valid()) {
String content = rfile->get_as_text();
// vai pa rindām:
while (!rfile->eof_reached()) {
String line = rfile->get_line();
}
rfile->close();
}
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++ kods pārbauda failu kļūdas, validē datus, izmanto versijas lauku un pamato algoritmu sarežģītību.
#include <godot_cpp/variant/string.hpp>
using namespace godot;
struct PersistenceCheckpoint {
String lesson = "5.1 Failu I/O Godot vidē";
bool uses_cpp = true;
bool handles_missing_file = true;
bool validates_data = true;
bool documents_complexity = 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 5.1 Failu I/O Godot vidē; 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 PersistenceCheckpoint {
String lesson = "5.1 Failu I/O Godot vidē";
bool uses_cpp = true;
bool handles_missing_file = true;
bool validates_data = true;
bool documents_complexity = 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/classes/file_access.hpp>
void SaveSystem::save_text(String filename, String content) {
String path = "user://" + filename;
Ref<FileAccess> file = FileAccess::open(path, FileAccess::WRITE);
if (file.is_valid()) {
file->store_string(content);
file->close();
UtilityFunctions::print("Saglabāts: ", path);
} else {
UtilityFunctions::printerr("Neizdevās atvērt: ", path);
}
}
String SaveSystem::load_text(String filename) {
String path = "user://" + filename;
if (!FileAccess::file_exists(path)) return "";
Ref<FileAccess> file = FileAccess::open(path, FileAccess::READ);
if (file.is_valid()) {
String content = file->get_as_text();
file->close();
return content;
}
return "";
}