Stundas uzdevums: Pievienot mūziku, skaņas efektus un audio buses spēlei.
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 audio sistēma izmanto AudioStreamPlayer nodes ar audio bus arhitektūru.
#include <godot_cpp/classes/audio_stream_player.hpp>
#include <godot_cpp/classes/resource_loader.hpp>
// Atskaņot SFX
AudioStreamPlayer* sfx = get_node<AudioStreamPlayer>("SFX");
sfx->set_stream(load_audio("res://sounds/jump.ogg"));
sfx->play();
// Mūzika ar fade-in
void play_music_fade_in(String path) {
music_player->set_stream(load_audio(path));
music_player->set_volume_db(-30);
music_player->play();
Tween* t = create_tween();
t->tween_method("set_volume_db", -30, -10, 2.0); // fade up
}
Audio buses: Master → Music, SFX, Voice. Lietotājs var pielāgot katru atsevišķi.
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.3 Audio sistēma";
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.3 Audio sistēma; 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.3 Audio sistēma";
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.
class AudioManager : public Node {
GDCLASS(AudioManager, Node)
private:
std::vector<AudioStreamPlayer*> sfx_pool;
AudioStreamPlayer* music_player;
static const int POOL_SIZE = 8;
public:
void _ready() override {
for (int i = 0; i < POOL_SIZE; i++) {
AudioStreamPlayer* p = memnew(AudioStreamPlayer);
p->set_bus("SFX");
add_child(p);
sfx_pool.push_back(p);
}
music_player = memnew(AudioStreamPlayer);
music_player->set_bus("Music");
add_child(music_player);
}
void play_sfx(String path) {
for (auto p : sfx_pool) {
if (!p->is_playing()) {
Ref<AudioStream> stream = ResourceLoader::get_singleton()->load(path);
p->set_stream(stream);
p->play();
return;
}
}
}
void play_music(String path) {
Ref<AudioStream> stream = ResourceLoader::get_singleton()->load(path);
music_player->set_stream(stream);
music_player->play();
}
};