Ich erstelle mein erstes Online-Spiel mit socket.io und möchte, dass es ein Echtzeit-Multiplayer-Spiel wie agar.io oder diep.io ist.
Aber ich habe versucht herauszufinden, wie alle Computer mit der gleichen Geschwindigkeit arbeiten können.
Ich habe drei Ideen für Models, aber keine davon scheint richtig zu sein, und ich frage mich, wie normale Videospiele das machen. (Sie können das Lesen meiner Ideen überspringen. Sie geben Ihnen nur einen Weg, die Probleme zu erkennen, die ich habe.)
Auf dem Server können die Clients selbstständig ausgeführt und Aktualisierungen an den Server übergeben werden, der sie dann an die übrigen Clients sendet. Dies hat das Problem, dass einige Computer schneller laufen als andere, sodass sie schneller aktualisiert werden und sich schneller über den Bildschirm bewegen können.
Bitten Sie den Server, den Clients mitzuteilen, wann sie aktualisieren sollen. Ich kann dann warten, bis der letzte Client antwortet (eine schreckliche Idee für den Fall, dass eine Person einen langsamen Computer hat), warten, bis der erste Client antwortet (erneut auf die Kommunikation vor jedem Frame wartet) oder sie einfach so schnell wie möglich senden (welche) scheint auf dasselbe Problem zu stoßen wie Nummer 1).
Lassen Sie den Server zu Beginn des Spiels den Clients mitteilen, wie schnell die Aktualisierung erfolgen soll. Dies würde bedeuten, dass der Kunde dafür verantwortlich ist, die Bewegung zwischen diesen Zeiträumen einzuschränken. Wenn es beispielsweise jemandem in diesem Zeitraum irgendwie gelungen ist, einen Knopf zweimal zu drücken, wird nur ein Knopfdruckereignis gesendet. Dies hat das Problem, dass einige Aktionen ignoriert werden (z. B. das Drücken von zwei Tasten) und dass die Interaktion von der Uhr des Clients abhängt, die möglicherweise nicht mit der Uhr des Servers übereinstimmt. Der Server muss dann den Überblick über jeden Client behalten und sicherstellen, dass die Aktualisierungen zum richtigen Zeitpunkt übermittelt werden.
Ich habe einige Nachforschungen angestellt , aber die Artikel, die ich lese, scheinen nicht speziell zu behandeln, was zu tun ist, wenn ein Client Updates schneller als andere Clients sendet.
In meinem speziellen Fall habe ich es mit Leuten zu tun, die schnellere Tastaturgeschwindigkeiten haben (ihr Computer würde mehr Tastaturaktualisierungen senden als andere Computer).
Wie gehen Programmierer normalerweise damit um?