Skip to content

ActionRPG

Alessandro Bria edited this page Sep 30, 2026 · 6 revisions

ActionRPG

ActionRPG usa il core per un gioco di ruolo d'azione con vista dall'alto. Come CustomPlatformer, implementa collision detection e collision response nel progetto; a differenza dei platform aggiunge dialoghi, inventario, portali e un nemico che usa pathfinding. È l'esempio migliore per seguire una funzione attraverso geometria, AI, input, UI e rendering.

Schermata di ActionRPG

Mappa del progetto

flowchart TD
    Game[Game del core] --> RPGGame
    GameScene[GameScene del core] --> RPGGameScene
    Renderable[RenderableObject del core] --> Movable[MovableObject]
    Movable --> Collidable[CollidableObject]
    Collidable --> Dynamic[DynamicObject]
    Collidable --> Static[StaticObject]
    Collidable --> Trigger
    Trigger --> Portal
    Dynamic --> Link
    Dynamic --> Enemy
    Enemy --> Soldier
    Dynamic --> NPC
    Dynamic --> Sword
    Soldier --> Pathfinding
Loading
Modulo Ruolo
RPGGame, RPGGameScene Stack, input, camera, quadtree e transizioni.
LevelLoader, SpriteFactory Livello JSON tramite LevelData; texture e sprite.
MovableObject, CollidableObject, DynamicObject, StaticObject Movimento top-down, broad/narrow phase e collision response.
Soldier, Pathfinding State machine e ricerca BFS su griglia.
Link, Sword, NPC, Trigger, Portal Attacco, interazione e teletrasporto.
HUD, Item, DialogBox, Menu Inventario, dialoghi e scene UI.

RPGGameScene attiva il quadtree per le query spaziali, comprese quelle usate nella collision detection e per l'occupazione delle celle. Il quadtree non esegue BFS: Pathfinding mantiene una griglia e calcola il prossimo waypoint. Il progetto usa GPUShaderWindow per gli shader condivisi e per la maschera circolare CPU dei portali; la pagina shader del core descrive entrambi i percorsi.

Dal main() al gioco

  1. main() registra RPGGame, poi inizializza sprite, loader, audio e font opzionali.
  2. RPGGame::init() inserisce overworld, HUD e menu iniziale nello stack. Il menu blocca il gioco finché New Game non lo rimuove.
  3. LevelLoader::load("overworld") legge levels/overworld.json con LevelData e crea la scena dai parametri di scene. loadJson(world, level) aggiunge sfondi, personaggi, ostacoli, portali e clipper descritti nel documento.
  4. RPGGameScene legge i controlli, aggiorna la scena e usa il quadtree; le classi concrete applicano le regole di movimento, collisione e gameplay.

Le zone fuori dal rettangolo nominale della scena, come la casa raggiunta da un portale, restano possibili perché l'auto-eliminazione degli oggetti è disabilitata e la radice del quadtree è più ampia della mappa. La griglia di Pathfinding, invece, è allocata sul rettangolo nominale: i due confini non vanno confusi.

Formato, percorso e caricamento sono uniformi ai tre platformer: levels/<name>.json, blocco scene obbligatorio, categories e objects. name compare soltanto dove serve, come sui portali da collegare. Vedi LevelData e livelli JSON.

Percorso consigliato

  1. Scena e risorse: avvio, JSON, coordinate, asset e input.
  2. Movimento e collisioni: gerarchia, OBB, SAT, quadtree e collision response.
  3. Pathfinding e NPC: griglia, BFS e state machine del Soldier.
  4. Link e gameplay: movimento, spada, interazione e limiti dell'esempio.
  5. UI e portali: HUD, inventario, dialoghi e teletrasporto.

Per le classi condivise parti da architettura del core, scene e oggetti e quadtree. Il diagramma completo delle classi affianca la mappa semplificata.

Sorgenti iniziali

Clone this wiki locally