Je développe actuellement un jeu de tir zombie de haut en bas en temps réel. Je code cela en Java, en utilisant JBox2D comme moteur physique. J'ai codé le réseautage cette semaine, et je suis maintenant à la synchronisation physique.
Je prévois d'utiliser le modèle client prédictif / serveur faisant autorité, où le client est libre de se déplacer, tant que le serveur l'approuve plus tard. Cela implique que le client envoie des paquets contenant des données de mouvement au serveur et que le serveur calcule la latence et simule à nouveau le monde à partir d'un état plus ancien.
Mon problème est que mon moteur physique actuel, JBox2D (essentiellement un port de Box2D), ne prend pas en charge le retour en arrière dans le monde, et il n'est apparemment pas si facile de sérialiser les données mondiales. J'ai 2 solutions, je pourrais soit modifier / étendre mon moteur physique actuel, soit écrire le mien.
Raisons d'écrire mon propre moteur physique -
- Je peux supprimer des fonctionnalités inutiles. Dans un jeu descendant, je n'ai vraiment besoin que de mécanismes de collision et de forces de maniement. Aucune gravité n'est impliquée.
- Je peux mieux comprendre le code et il serait [très probablement] plus facile d'implémenter des fonctions de restauration
Raisons pour étendre / modifier JBox2D
- Écrire mon propre moteur de physique serait une tâche considérable, ce qui pourrait être fastidieux
- JBox2D a une communauté largement solidaire, qui peut m'aider avec mon développement
- JBox2D, a des optimisations spécifiques, pour des choses comme la détection de collision, qui le rendent utile
- Certains travaux ont déjà été effectués à ce sujet, mais peu de code a été partagé
Alors, quelles sont vos opinions. Ceci est mon premier jeu, et je ne suis en aucun cas un développeur de jeux professionnel. Si quelqu'un pouvait fournir des liens vers des travaux déjà effectués dans le domaine (de préférence en utilisant JBox2D / Box2D / Java).
strictfp
partout, ce qui aura un impact sérieux sur les performances. Sinon, le serveur et le client peuvent ne pas obtenir exactement les mêmes résultats. Je recommanderais plutôt d'utiliser un point fixe.