Stundas uzdevums: Izveidot pilnvērtīgu 2D platformas spēli ar 3 līmeņiem, savācamiem un finiša bandieri.
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ļā.
Platformas spēle ar šādām funkcijām:
// Klašu hierarhija
class Player : public CharacterBody2D { ... };
class Enemy : public CharacterBody2D { /* patrol AI */ };
class Pickup : public Area2D { /* coin/gem/key */ };
class Level : public Node2D { /* satur visas iepriekšminētās */ };
class Game : public Node { /* level pārvaldība */ };
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: spēlētājs, objekti un sadursmes darbojas ar C++ klasēm, kas lieto _physics_process, Input, CharacterBody2D, Area2D vai move_and_slide.
#include <godot_cpp/variant/string.hpp>
using namespace godot;
struct PhysicsCheckpoint {
String lesson = "2.6 Noslēguma projekts: Platformas spēle";
bool uses_cpp = true;
bool uses_physics_process = true;
bool uses_delta_time = true;
bool checks_collisions = 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 2.6 Noslēguma projekts: Platformas spēle; 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 PhysicsCheckpoint {
String lesson = "2.6 Noslēguma projekts: Platformas spēle";
bool uses_cpp = true;
bool uses_physics_process = true;
bool uses_delta_time = true;
bool checks_collisions = 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 Game : public Node {
GDCLASS(Game, Node)
private:
int score = 0;
int current_level = 1;
public:
void load_next_level() {
current_level++;
if (current_level > 3) {
UtilityFunctions::print("Game complete! Score: ", score);
get_tree()->quit();
return;
}
String scene_path = "res://levels/Level" + String::num(current_level) + ".tscn";
get_tree()->change_scene_to_file(scene_path);
}
void add_score(int amount) { score += amount; }
};