Repository navigation
CustomPlatformerSlopes Scena e Risorse
Torna alla panoramica · Movimento e collisioni
Il progetto collega ../core e usa ../utils. Game loop, scene, rendering, audio, editor e LevelData provengono dalle stesse librerie degli altri prototipi. Le classi di fisica e gameplay rimangono nella cartella del gioco.
main() crea e registra PlatformerGame, poi chiama init() e run(). Il costruttore del gioco inizializza SpriteFactory, Audio e, se abilitato, Fonts; il distruttore libera prima le scene e poi i servizi.
LevelLoader non è un singleton: load("1-1") legge levels/1-1.json tramite LevelData, costruisce PlatformerGameScene e passa il documento a loadJson(). Il JSON contiene core_version, categories e objects, secondo il formato condiviso. Rettangolo della scena RectF(0, -20, 176, 50), unità {16, 16}, timestep 0.01 e colore {156, 252, 240, 255} sono definiti nel loader e passati al costruttore. La vista iniziale è configurata nella scena concreta.
La scena usa yUp: false: Y cresce verso il basso. I rettangoli devono essere allineati agli assi. Spawn di Mario, quattro Goomba, oggetti e geometrie dei collider sono nel JSON; sfondo e linea di morte a y = 4 sono creati nel C++.
| Categoria | Interpretazione |
|---|---|
Static, Pipe
|
Collider rettangolari trasparenti, senza sprite. |
Slope |
Polilinea di segmenti inclinati; il verso è ricavato dagli estremi. |
Platform |
Polilinea con segmenti orizzontali attraversabili dal basso e dai lati. |
Block, Brick, Wood
|
Blocchi dei diversi tipi; content specifica il contenuto. |
Coin, Goomba, Mario
|
Oggetti e personaggi; il rettangolo definisce la posizione di spawn. |
Lift |
Piattaforma mobile, con vertical e range positivo. |
category è un indice nell’array categories. name è un’etichetta opzionale: il contenuto dei blocchi usa il campo separato content.
Nel livello distribuito Slope ha indice 9. Un esempio completo di regione è:
{
"category": 9,
"multiline": [{"x": 5, "y": 1}, {"x": 8, "y": -1}]
}Con Y crescente verso il basso, l'esempio sale verso destra. Invertire i due estremi non cambia la rampa. Slope riceve un LineF nel costruttore, ne calcola ingombro e verso e rifiuta coordinate non finite, segmenti orizzontali, verticali o degeneri. Per i tratti orizzontali si usa Platform, che valida il segmento e ne calcola l'ingombro nel proprio costruttore. Il loader si limita a creare un oggetto per ogni coppia di punti consecutivi.
Le rampe sono collider trasparenti: la grafica proviene dallo sfondo e la visualizzazione dei collider mostra il segmento. Il JSON non contiene risesRight, colori, sprite o layer.
Le sei rampe del livello permettono di provare tre situazioni:
- fra
x = 5ex = 12: salita, raccordo piano e discesa; - fra
x = 20ex = 27: rampe raccordate al primo tubo; - fra
x = 45ex = 53: due pendenze che formano una valle.
Lo sfondo level_1_1 è creato direttamente nel loader C++ e registrato con addBackgroundImage() per essere visibile anche nell'editor, senza generare una regione modificabile sopra i collider. Le entità specifiche scelgono le sprite nel proprio costruttore. SpriteFactory::init(renderer) carica gli asset SMB3; Audio carica suoni e musiche, incluse quelle MP3. V attiva/disattiva tutto il sonoro, anche nei menu e in pausa.
E apre l'editor sul livello caricato. Per una rampa premi L, scegli Slope con Spazio, fai clic sui due estremi e premi Esc per terminare. La linea rende visibile il verso senza proprietà aggiuntive. Per i tratti orizzontali scegli Platform. content e le altre proprietà di gameplay si impostano direttamente nel JSON e vengono conservate dal salvataggio.
L’editor salva la copia del livello accanto all’eseguibile. Prima della build successiva occorre riportare le modifiche nel JSON sorgente: CMake ricopia i livelli a ogni compilazione. Per applicare le modifiche bisogna ricaricare il livello o riavviare il gioco. Vedi anche Editor dei livelli.
- 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