Skip to content

CustomPlatformerSlopes Scena e Risorse

Alessandro Bria edited this page Oct 31, 2026 · 2 revisions

CustomPlatformerSlopes — Scena e risorse

Torna alla panoramica · Movimento e collisioni

Librerie condivise e caricamento

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++.

Categorie del livello

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.

Aggiungere una rampa

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 = 5 e x = 12: salita, raccordo piano e discesa;
  • fra x = 20 e x = 27: rampe raccordate al primo tubo;
  • fra x = 45 e x = 53: due pendenze che formano una valle.

Sfondo, sprite e audio

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.

Editor e salvataggio

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.

Sorgenti

Clone this wiki locally