Per iniziare, ho un buon background nel networking (hardware, router, ex.) Ma pochissime conoscenze oltre le basi della programmazione di rete. Potrebbe sembrare una domanda stupida, ma voglio sapere in cosa mi sto cacciando mentre immagino l'implementazione del multiplayer nel mio gioco.
Sto creando un mondo basato su piastrelle, che viene generato attraverso un semplice array 2D. Diciamo qualcosa come World [100] [100], per semplicità.
Attualmente, il metodo di rendering esegue il rendering delle tessere solo in base alla risoluzione della finestra, più una tessera (per un rendering uniforme durante il movimento.) Non importa quanto sia grande il mondo (10x10, 1 milione x 1 milione) il rendering è impeccabile nelle prestazioni.
Il gameplay non ha bisogno di altro che sapere cosa è attualmente visibile (renderizzato sullo schermo +1) e, nella maggior parte dei casi, ALCUNE informazioni sulle tessere in un'area intorno al giocatore.
Quindi qualsiasi altra cosa inviata dal Server non sarebbe l'informazione completa sul riquadro. Ex. Gli oggetti distesi sul terreno, il tipo di terreno, gli alberi, ecc. Non sarebbero importanti nell'area al di fuori della vista del giocatore, ma sarebbero solo ciò che il Cliente / Giocatore deve sapere in quelle tessere. (Es. I "nomi in arrivo" di Ultima Online in cui i giocatori potevano conoscere un personaggio [giocatore o mostro] erano appena oltre le tessere nella loro vista renderizzata.)
Non so molto sulla rete, quindi forse, quando apprenderò, potrebbe rispondere alla mia domanda. Tuttavia, sono curioso di sapere se questa è una soluzione fattibile o se l'idea è semplicemente ridicola.
Le informazioni inviate riguarderebbero un'area di tessere 10x15 e ogni tessera contiene informazioni su ciò che si trova sulla tessera. Più efficacemente, tutto sarebbe un oggetto, in cui la tessera contiene tutti gli oggetti sulla tessera. Ex. Tile [4] [4] contiene Sword # 23452, Rock2, Tree5, Player3, Monster4.
Le tessere vuote invierebbero nient'altro che il tipo di terreno [Erba, Sabbia, Acqua] se non già caricato durante l'inizializzazione / caricamento. Alcune tessere avrebbero una manciata di oggetti [Tree2, Sword # 924, Gold, Corpse, Rock3].
Quindi non riesco a immaginare che un riquadro avrebbe molte informazioni da inviare al client dal server, poiché il client deve solo conoscere la trama che deve essere caricata e posizionarla per posizionarla sullo schermo. Posizione essendo solo due numeri interi e Texture come un numero intero per un elenco di file per indicare al client di eseguire il rendering.
Nel modo più folle, il Server dovrebbe inviare 150 tessere con le informazioni di solo una manciata di Oggetti OnLOAD, e da quel momento in poi si aggiornano solo le modifiche alle tessere (se presenti) e tutte le nuove tessere (da 10 a 15 ogni volta che un giocatore si muove in una direzione ) e la direzione del movimento per i personaggi sullo schermo (in modo che il cliente possa simulare movimenti fluidi tra le tessere).
Presumo di aver ragione nel pensare che si tratti di una quantità incredibilmente bassa di informazioni inviate su Internet o tra pari, quindi dovrebbe avere piccoli problemi con le prestazioni anche su connessioni ritardate? O sono così ignorante del networking che la mia mente sarà sbalordita quando finalmente riesco ad aprire il mio libro sul networking multiplayer?
Se si tratta di una quantità molto bassa di informazioni inviate tra client / server, avrebbe più senso caricare semplicemente l'intero mondo all'inizializzazione? O 'Mappa' se il mondo è eccessivamente grande. E poi dopo LOAD, invia solo i riquadri che vengono aggiornati?
Sto ancora riflettendo su come dovrei trattare in modo specifico i dati. Il libro che sto usando come riferimento vuole che io abbia un Elenco collegato, in cui aggiungo e rimuovo oggetti, quindi tutto è un bool. "C'è un personaggio? C'è un albero?"
Stavo pensando a un approccio diverso, come un contenitore che contiene oggetti e la logica del server che invia solo ciò che è necessario per dire al client cosa rendere. Forse con oggetti che contengono al suo interno informazioni di rete, che vengono inviate quando richiesto dal Server.