Repository navigation
Box2DPlatformer
Questo esempio conserva la struttura del core, ma affida la simulazione fisica a Box2D 3.x invece di risolvere le collisioni con il codice di CustomPlatformer. È utile per confrontare due modi di costruire un platform sopra le stesse astrazioni di scena, vista, sprite e UI.

Il diagramma completo delle classi è raccolto in una pagina dedicata.
flowchart TD
Game[Game del core] --> CPG[PlatformerGame]
GameScene[GameScene del core] --> CPGS[PlatformerGameScene]
Renderable[RenderableObject del core] --> Rigid[RigidObject]
Rigid --> Dynamic[DynamicObject]
Rigid --> Static[StaticObject]
Rigid --> Kinematic[KinematicObject]
Rigid --> Trigger
Dynamic --> Player
Dynamic --> Box
Dynamic --> Enemy
Enemy --> Slime
Dynamic --> Fire
Static --> Terrain
Kinematic --> Gear
| Modulo | Ruolo |
|---|---|
PlatformerGame, LevelLoader
|
Inizializzano lo stack e costruiscono il livello. |
PlatformerGameScene |
Crea il Box2D world, esegue b2World_Step() con timestep fisso, legge i contatti e gestisce input e camera. |
RigidObject, DynamicObject, StaticObject, KinematicObject
|
Collegano oggetti visibili, body e shape Box2D alle regole di gioco. |
Player, Terrain, Gear, Box, Slime, Fire, Trigger
|
Definiscono movimento, superfici, ostacoli e interazioni. |
SpriteFactory, HUD, Menu
|
Gestiscono texture, animazioni e interfaccia. |
PlatformerGameScene::updateWorld() sostituisce l'aggiornamento fisico generico di GameScene: per ogni passo _dt applica i controlli fisici, avanza il Box2D world, legge gli eventi di inizio/fine contatto e aggiorna gli oggetti con _dt. La classe conserva comunque input, camera e rendering del core. Nella View l'asse Y della scena è orientato verso l'alto (yUp), coerentemente con la gravità negativa e il salto positivo. Il progetto usa gli ID di world, body e shape dell'API Box2D 3, non le vecchie classi C++ di Box2D 2.
-
main()crea e registraPlatformerGame. Il costruttore del gioco inizializzaSpriteFactory,Audioe i font opzionali;LevelLoaderoffre metodi statici e non richiede inizializzazione. -
PlatformerGame::init()aggiunge nell'ordinelevel0, HUD e menu iniziale. Il menu è bloccante;New Gamelo chiude. -
LevelLoader::load("level0")leggelevels/level0.jsonconLevelDatae crea la scena con parametri definiti nel C++;loadJson()istanzia i collider del terreno, gli ingranaggi e il giocatore dalle regioni JSON. Immagini del mondo e overlay sono configurati nel loader C++. - Durante il gioco,
Gamegestisce il ciclo delle scene;PlatformerGameSceneavanza Box2D e distribuisce i suoi eventi;RigidObjectsincronizza la trasformazione del body con il rendering.
La distinzione essenziale è questa: Box2D decide moto e contatti fisici, mentre gli oggetti del progetto decidono cosa quei contatti significano per il gameplay. RigidObject::collision() è il punto di raccordo, non un secondo solver.
Le classi di avvio e scena si chiamano PlatformerGame e PlatformerGameScene; Box2DPlatformer rimane il nome del progetto. Il formato dei livelli e il ruolo dei loader sono descritti in LevelData e livelli JSON.
- Scena e risorse: avvio, livello, stack, camera, input e asset.
- World, body e contatti: timestep, ID Box2D 3, shape, filtri, notifiche e sensori.
- Entità e gameplay: giocatore, pendenze, ingranaggi, proiettili e nemici.
Parti da architettura del core e scene e oggetti se non conosci ancora il framework. Il confronto con CustomPlatformer mostra quali responsabilità vengono delegate al motore fisico.
- Panoramica
- Diagramma delle classi
- Architettura e game loop
- Sequenza di un frame
- Input ed eventi
- Scene e oggetti
- Rendering e coordinate
- Sprite e testo
- UI e overlay
- Quadtree
- Servizi e asset
- Estendere il core
- Editor dei livelli
- LevelData e livelli JSON
- Shader