Ich arbeite derzeit an einem physikorientierten Einzelspieler-Spiel, bei dem die Physik serverseitig simuliert werden soll. Dies liegt daran, dass das Spiel Bestenlisten, anhaltende Spielerfortschritte usw. hat und ich jede Art von Betrug verhindern möchte - im Grunde genommen eine reine Client-Server-Architektur, der Client ist „dumm“ und zeigt nur an, was der Server von Ihnen verlangt.
Das Problem ist jedoch, dass das Spiel höchstwahrscheinlich von Hunderten (vielleicht Tausenden) von Menschen gleichzeitig gespielt wird. Dies betrifft mich, da es höchstwahrscheinlich die Server-Verarbeitungsleistung beeinträchtigen wird, wenn ich Hunderte von Zuständen gleichzeitig ausführen und warten muss.
Ich hätte keine Probleme damit, alle Physiksimulationen auf die Clientseite zu verschieben, aber dann würde ich wirklich einen Weg brauchen, um zu validieren, ob das Ergebnis einer Client-Simulation gültig ist. Ich kann jedoch nicht herausfinden, wie.
Ich habe darüber nachgedacht, die Simulationsserverseite hin und wieder auszuführen, um zu überprüfen, ob der Client noch fair spielt, aber ich möchte wirklich, dass der Server so wenig wie möglich belastet wird.
Die Physik wird ungefähr so komplex wie die GDC 2011-Demo von Glenn Fiedler , vielleicht sogar noch einfacher. Es werden jedoch viel mehr immer kollidierende starre Körper in einer einzigen Szene sein und sie werden alle gleichzeitig sichtbar sein.
Es fällt mir schwer, eine Antwort auf diesen speziellen Fall zu finden, da die meisten Ressourcen im Internet - auch hier ist Glenn Fiedlers Website eine großartige - über kleine vernetzte Physik sprechen (z. B. ein FPS mit 30 Spielern wie Halo).
Alle Ratschläge, Websites, Papiere oder dergleichen zu diesem Thema werden sehr geschätzt.
Eine Zusammenfassung der Fragen, auf die ich eine Antwort haben möchte:
- Wie realisierbar ist ein Client-Server-Modell? Ist meine Server-Verarbeitungsleistung legitim und geerdet?
- Ist es möglich, eine vom Client auf dem Server ausgeführte physikalische Simulation zuverlässig zu validieren? Wenn das so ist, wie?