Ich entwickle gerade einen Top-Down-Echtzeit-Zombie-Shooter. Ich codiere dies in Java und verwende JBox2D als meine Physik-Engine. Ich habe diese Woche das Netzwerk codiert und bin jetzt mit der Synchronisation der Physik beschäftigt.
Ich plane, das Predictive Client / Authoritative Server-Modell zu verwenden, bei dem sich der Client frei bewegen kann, solange der Server dies später genehmigt. Dies beinhaltet, dass der Client Pakete mit Bewegungsdaten an den Server sendet und der Server die Latenz berechnet und die Welt aus einem älteren Zustand neu simuliert.
Mein Problem ist, dass meine aktuelle Physik-Engine, JBox2D (im Grunde ein Port von Box2D), das Zurückrollen der Welt nicht unterstützt und es anscheinend nicht so einfach ist, die Weltdaten zu serialisieren. Ich habe 2 Lösungen, ich könnte entweder meine aktuelle Physik-Engine modifizieren / erweitern oder meine eigene schreiben.
Gründe für das Schreiben meiner eigenen Physik-Engine -
- Ich kann unnötige Funktionen entfernen. In einem Top-Down-Spiel brauche ich nur Kollisionsmechanik und Handhabungskräfte. Es ist keine Schwerkraft beteiligt.
- Ich kann den Code besser verstehen und es wäre [höchstwahrscheinlich] einfacher, Rollback-Funktionen zu implementieren
Gründe für die Erweiterung / Änderung von JBox2D
- Das Schreiben meiner eigenen Physik-Engine wäre ein erheblicher Arbeitsaufwand, der umständlich sein könnte
- JBox2D hat eine breite unterstützende Community, die mir bei meinem Entwickler helfen kann
- JBox2D verfügt über spezifische Optimierungen für Dinge wie die Kollisionserkennung, die es nützlich machen
- Einige Arbeiten wurden bereits durchgeführt, aber es wurde nur wenig Code freigegeben
Also, was sind deine Meinungen. Dies ist mein erstes Spiel und ich bin kein professioneller Spieleentwickler. Wenn jemand einige Links zu Arbeiten bereitstellen könnte, die bereits in der Region ausgeführt wurden (vorzugsweise mit JBox2D / Box2D / Java).
strictfp
überall verwenden müssen, da dies die Leistung erheblich beeinträchtigt. Andernfalls erhalten der Server und der Client möglicherweise nicht genau die gleichen Ergebnisse. Ich würde empfehlen, stattdessen einen festen Punkt zu verwenden.