Di
Queste sono in realtà due domande in una. Innanzi tutto, cerco un modo per archiviare in modo efficiente grandi quantità di dati sui riquadri. L'altro aspetto riguarda l'interrogazione del set di dati e la visualizzazione di riquadri. Lascia che ti dia prima qualche informazione.
Stiamo realizzando un gioco magnate multiplayer basato su browser utilizzando la libreria CraftyJS per renderlo su Canvas. Sullo sfondo della GUI stiamo eseguendo Yii Framework su PHP e tutto si collega a un generatore di mappe casuali Python e un motore di gioco.
Ecco come appare il primo rendering approssimativo della mappa: http://i.imgur.com/khAXtl.png
Memorizzare i dati della mappa
Il mondo di gioco viene generato casualmente ogni volta che inizia il gioco. La dimensione è di 100x100 tessere esagonali per ogni giocatore. Ciò significa che per una partita a tre giocatori, vengono create 90.000 tessere. Attualmente creo solo un array JavaScript da cui eseguo il rendering della mappa.
Funziona bene per il rendering, ma per qualsiasi tipo di interazione con la mappa dobbiamo memorizzare quale giocatore possiede la tessera, quale tipo di struttura è costruita su di essa, qual è il suo prezzo attuale e così via. Inizialmente, almeno per il prototipo, volevamo usare MySQL, ma dopo alcuni test, non è esattamente veloce come vorrei. Forse un negozio di oggetti come MongoDB sarebbe più adatto per l'archiviazione dei dati di tile invece di una tabella SQL. O forse qualcos'altro?
Visualizzazione della mappa
Un altro problema che vedo è muoversi sulla mappa. Attualmente sto creando entità Crafty per ogni riquadro anche se non è nella finestra. Questo è lento, perché anche se Crafty esegue il rendering solo di quelli nella finestra, memorizza e probabilmente scorre tutte le tessere su ciascun evento di rendering. Quello che ho attualmente è una mappa generata disegnata che è molto lenta da caricare e balbetta quando ti muovi, ora mi piacerebbe renderla giocabile.
La mia prima idea è stata quella di caricare il sottoinsieme visualizzato di riquadri presenti nella finestra. Ma quando un giocatore sposta la finestra in un'area vuota, devo interrogare il server e attendere la risposta, solo allora la mappa può essere renderizzata. Questo andrebbe bene in un'applicazione nativa, ma è lento in un gioco web.
Il modo per ottenere prestazioni fluide dalla mappa potrebbe essere il precaricamento di un sottoinsieme più grande di riquadri in un array javascript e utilizzarlo come cache. Il giocatore avrebbe alcune schermate "memorizzate nella cache" e quando sposta il viewport, caricavo più riquadri nella "cache" di JS.
Sono diretto nella giusta direzione? Mi piacerebbe avere qualche informazione in più da qualcuno che ha fatto qualcosa di simile. Sono nuovo nello sviluppo di giochi, ma ho passato molte fonti nelle ultime due settimane.