Stundas uzdevums: Saprast atšķirību starp _process un _physics_process metodēm un izveidot pirmo kustīgu objektu.
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ā divas galvenās per-frame metodes:
_process(double delta) - izsaukts katrā renderēšanas kadrā (~60 FPS). Lieto vizuāliem efektiem._physics_process(double delta) - fiksēts laiks (60 Hz noklusējumā). Lieto fizikai un kustībām.Delta ir laiks (sekundēs), kas pagājis kopš pēdējā kadra. Reizinot ātrumu ar delta, kustība būs vienmērīga neatkarīgi no FPS.
void Player::_physics_process(double delta) {
// Slikti - bez delta:
// position.x += 5; // ātrums atkarīgs no FPS
// Labi - ar delta:
Vector2 pos = get_position();
pos.x += 200.0f * delta; // 200 pikseļi/sekundē
set_position(pos);
}
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.1 Process un fizikas cikli";
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.1 Process un fizikas cikli; 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.1 Process un fizikas cikli";
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.
#include "mover.hpp"
#include <godot_cpp/core/class_db.hpp>
#include <godot_cpp/variant/utility_functions.hpp>
using namespace godot;
void Mover::_bind_methods() {}
void Mover::_physics_process(double delta) {
Vector2 pos = get_position();
pos += velocity * delta;
if (pos.x < 0 || pos.x > 1280) velocity.x = -velocity.x;
if (pos.y < 0 || pos.y > 720) velocity.y = -velocity.y;
set_position(pos);
}