Attualmente sto sviluppando uno sparatutto zombi top down, in tempo reale. Sto scrivendo questo codice in Java, usando JBox2D come mio motore fisico. Questa settimana ho codificato il networking e ora sono in sincronia con la fisica.
Sto pensando di utilizzare il modello predittivo client / server autorevole, in cui il client è libero di spostarsi, a condizione che il server lo approvi in seguito. Ciò comporta che il client invii pacchetti contenenti dati di movimento al server e che il server calcoli la latenza e simuli nuovamente il mondo da uno stato precedente.
Il mio problema è che il mio attuale motore fisico, JBox2D (fondamentalmente una porta di Box2D), non supporta il rollback del mondo e apparentemente non è così facile serializzare i dati del mondo. Ho 2 soluzioni, potrei modificare / estendere il mio attuale motore fisico o scriverne uno mio.
Ragioni per scrivere il mio motore di fisica -
- Posso rimuovere funzionalità non necessarie. In un gioco top down, ho davvero bisogno solo di meccaniche di collisione e forze di gestione. Nessuna gravità è coinvolta.
- Riesco a capire meglio il codice e sarebbe [molto probabilmente] più semplice implementare le funzioni di rollback
Motivi per l'estensione / modifica di JBox2D
- Scrivere il mio motore fisico sarebbe una notevole quantità di lavoro, che potrebbe essere ingombrante
- JBox2D ha una community ampiamente supportata, che può aiutarmi con il mio sviluppatore
- JBox2D, ha ottimizzazioni specifiche, per cose come il rilevamento delle collisioni, che lo rendono utile
- Alcuni lavori sono già stati fatti su questo, ma è stato condiviso poco codice
Quindi quali sono le tue opinioni. Questo è il mio primo gioco e non sono assolutamente uno sviluppatore di giochi professionale. Se qualcuno potesse fornire alcuni link per il lavoro già svolto nell'area (preferibilmente usando JBox2D / Box2D / Java).
strictfp
ovunque, il che avrà un impatto grave sulle prestazioni. In caso contrario, il server e il client potrebbero non ottenere esattamente gli stessi risultati. Consiglierei invece di utilizzare il punto fisso.