Frage

Ich habe einige Erfahrung machen Multiplayer turn-based Spiele über Sockets, aber ich habe nie versucht, ein Echtzeit-Action-Spiel. Welche Art von zusätzlichen Fragen habe ich mit umgehen? Muss ich eine Geschichte von Aktionen der Spieler im Falle verzögerten Spieler haben in der Vergangenheit etwas halten? UDP-Pakete Muss ich wirklich verwenden oder wird TCP ausreichen? Was sonst noch?

Ich habe nicht wirklich entschieden, was zu machen, aber für die Zwecke dieser Frage können Sie ein 10-Spieler 2D-Spiel mit X-Y-Bewegung betrachten.

War es hilfreich?

Lösung

  • ‚Client-Server‘ oder ‚Peer-to-Peer‘ oder etwas dazwischen: die Computer Behörde, über die Spielaktionen hat.

Mit wiederum basierten Spielen, in der Regel ist es sehr einfach zu sagen, nur ‚der Server höchste Autorität hat und wir sind fertig.‘ Mit Echtzeit-Spiele, oft, dass Design ist ein guter Anfang, aber sobald Sie Latenz hinzufügen die Client-Bewegung / Aktionen fühlt sich nicht mehr reagiert. So Sie irgendeine Art von ‚Latenz Versteck‘ hinzufügen so dass die Kunden Eingang ihres Charakter oder Einheiten beeinflussen sofort, dieses Problem zu lösen, und jetzt müssen Sie sich mit der Vereinbarkeit von Fragen befassen, wenn der Client und Server gamestate zu divergieren beginnen. 9 Mal outta 10, das ganz gut, Sie Pop oder die Objekte Lerp der Client über auf die maßgebliche Position beeinflusst hat, aber dass 1 von 10-mal ist, wenn das Objekt der Spieler Avatar oder etwas ist, diese Lösung nicht akzeptabel ist, so dass Sie beginnen gibt die Client-Behörde über einige Aktionen. Nun müssen Sie das vielfältige gamestates auf dem Server Einklang zu bringen, und öffnen sie bis zu einem potenziell ‚Betrug‘ über einen bösartigen Client, wenn Sie so etwas kümmern. Dies ist im Grunde, wo jeder teleportieren / Betrogene / was auch immer Fehler / cheat kommt.

Natürlich könnte man mit einem Modell beginnen, wo ihre ‚Objekte‚und ignorieren den Betrug Problem (fein in ganz wenigen Fällen)‘jeder Kunde Autorität über‘ hat. Aber jetzt sind Sie anfällig für eine massive auf dem Spielsimulation beeinflussen, wenn dieser Client heraus fällt, oder sogar ‚nur fällt ein wenig hinter in der Simulation mitzuhalten‘ - effektiv jeden Spieler Spiel wird am Ende wird / spüren die Auswirkungen einer nacheilende oder anderweitig underperforming Client in der Form von entweder warten Client hinken die gamestate sie nicht synchron zu fangen, oder mit kontrollieren.

  • 'synchronisiert' oder 'Asynchron'

Eine gemeinsame Strategie alle Spieler, um sicherzustellen, auf dem gleichen gamestate arbeiten, ist einfach auf der Liste der Spieler Eingänge stimmen (über eine der oben beschriebenen Modelle) und haben dann das Gameplay Simulation synchron auf allen Maschinen spielen. Dies bedeutet, dass die Simulation Logik exakt übereinstimmen, oder die Spiele nicht synchron gehen. Dies ist eigentlich einfacher und schwieriger als es klingt. Es ist einfacher, weil ein Spiel nur Code und Code ziemlich führt genau das gleiche, wenn es den gleichen Eingang geben (auch Zufallszahlengeneratoren). Es ist schwieriger, weil es zwei Fälle, in denen dies nicht der Fall ist: (1), wenn Sie versehentlich verwenden zufällig außerhalb der Spielsimulation und (2), wenn Sie Schwimmer verwenden. Ersteres wird durch mit strengen Regeln / Behauptungen behebt über das, was RNGs ist die Verwendung durch welche Spielsysteme. Letzteres wird durch nicht mit Schwimmern gelöst. (Schwimmer haben eigentlich zwei Probleme, man sie arbeiten sehr unterschiedlich basierend auf Optimierung Konfiguration Ihres Projekts, aber auch wenn das ausgearbeitet wurde, arbeiten sie atm inkonsequent über verschiedene Prozessorarchitekturen, lol). Starcraft / Warcraft und jedes Spiel, dass dieses Modell eine ‚Wiederholung‘ höchstwahrscheinliche Verwendung bietet. In der Tat, ein Replay System ist eine gute Möglichkeit zu testen, ob Ihre RNGs synchron bleiben.

Mit einer Asynchron-Lösung der Spiele staatlichen Behörden übertragen einfach diesen ganzen Staat zu allen anderen Kunden bei einer Frequenz. Die Kunden nehmen, dass die Daten und Slam, dass in ihre gamestate (und normalerweise etwas vereinfachend Extrapolation tun, bis sie das nächste Update zu erhalten). Hier ist, wo ‚udp‘ eine praktikable Option wird, weil Sie die gesamte gamestate jeden ~ 1sec Spamming oder so, fallen einige Bruchteile dieses Updates irrelevant sind. Für Spiele, die relativ wenig Spielzustand (Beben, world of warcraft) haben dies ist oft die einfachste Lösung.

Andere Tipps

Es gibt ein paar Faktoren bei der Einrichtung Multiplayer beteiligt

  1. Das Protokoll, es ist wichtig, dass Sie entscheiden, ob Sie TCP oder UDP wollen. UDP hat weniger Aufwand, ist aber nicht Lieferung garantiert. Im Gegensatz dazu TCP ist mehr vertrauenswürdig. Jedes Spiel wird ihr bevorzugtes Protokoll hat. UDP zum Beispiel wird für einen Ego-Shooter arbeiten, aber nicht für ein RTS geeignet sein, wo Informationen konsistent sein muss

  2. Firewall / Verbindung. Sicherstellen, dass Ihr Multiplayer-Spiel nicht 2000 ausgehende Verbindungen zu machen hat und verwendet ein Standard-Port so Forwarding einfach ist. Interfacing es mit Windows-Firewall wird wahrscheinlich ein zusätzlicher Bonus sein.

  3. Bandbreite. Dies ist wichtig, wie viele Daten beabsichtigen Sie über eine Netzverbindung zu schieben? Ich denke, das wird kommen Prüfung und Aufzeichnung Durchsatz zu spielen. Wenn Sie sich nach oben von 200kb / s für jeden Client erfordert möchten Sie vielleicht ein paar Dinge zu überdenken.

  4. Server laden. Dies ist auch wichtig, wie viel Verarbeitung wird durch einen Server für ein normales Spiel erforderlich? Haben Sie auch einen Super-8-Core-Server mit 16 GB RAM benötigen, um sie auszuführen? Gibt es Möglichkeiten, es zu reduzieren?

Ich denke, es gibt Haufen mehr, aber wünschen Sie wirklich ein Spiel, das bequem über das Netzwerk zu spielen und über eine Vielzahl von Verbindungen.

Die Planung ist dein bester Freund. Finde heraus, was Ihre Bedürfnisse wirklich sind.

Laden von Daten: Wird jeder Computer die gleichen Modelle und Grafiken haben, und nur Namen und Standorte sind über das Netz bewegen. Wenn jeder Spieler ihren Charakter oder andere Gegenstände anpassen können, müssen Sie diese Daten bewegen.

Cheating: tun Sie es kümmern? Können Sie sich darauf verlassen, was jeder Kunde sagt. Wenn nicht, dann werden Sie serverseitige Logik anders aussehen, als Sie die Client-seitige Logik. Stellen Sie sich diese einfachen Fall, jede Ihrer 10 Spieler können eine andere Bewegungsgeschwindigkeit haben wegen Power-Ups. Zur Minimierung von Betrug sollten Sie berechnen, wie weit jeder Spieler zwischen Kommunikations Updates vom Server verschieben kann, da sonst ein Spieler hacken könnte es beschleunigen und nichts würde sich stoppen. Wenn ein Spieler konsequent ein wenig schneller als erwartet oder hat einen Einen Zeitsprung, würde der Server nur sie in der nächsten Position neu zu positionieren, was möglich war, weil es wahrscheinlich Taktverschiebung oder eine einmalige Unterbrechung der Kommunikation. Allerdings, wenn ein Spieler ständig doppelt so weit wie möglich bewegt, dann kann es klug sein, um sie aus dem Spiel kicken. Je mehr Mathe, desto mehr Teile des Spiels Zustand Sie doppelt auf dem Server überprüfen kann, desto konsequenter das Spiel wird übrigens diese härter machen wird betrügt.

Wie Peer-to-Peer ist es: Auch wenn das Spiel Peer sein wird, werden Sie wahrscheinlich ein Spieler ein Spiel starten wollen Peer wird haben und sie als Server verwenden, ist dies viel einfacher als zu versuchen, einige der verwalten mehr Cloud-basierte Ansätze. Wenn kein Server ist, dann müssen Sie ein Protokoll arbeiten für Streitigkeiten zwischen zwei Maschinen mit inkonsistenten Spielen Zuständen zu lösen.

Auch die Planung ist Ihr bester Freund-Plan, Plan, Plan. Wenn Sie über ein Problem nachdenken genug können Sie denken, Sie Ihren Weg durch die meisten Probleme. Dann können Sie über die, die anfangen zu denken Sie noch nicht gelöst haben.

Wie wichtig ist die Vermeidung von Betrug? [Können Sie keine Informationen vertrauen von einem Client, oder können sie vertrauenswürdig und authentifiziert werden?]

Objektmodell Wie werden die Objekte von einer Maschine zur anderen übertragen? Wie werden die Aktionen auf einem Objekt durchgeführt?

Tun Sie Client / Server oder Peer-to-Peer?

Zufallszahlen Wenn Sie einen Peer-to-Peer zu tun, dann müssen Sie sie halten sperren gestufte und die Zufallszahlen synchronisiert.

Wenn Sie Client / Server tun, wie geht man mit Verzögerung? [Dead Reckoning?]

Es gibt eine Menge von nicht-triviale Probleme in Netzwerkcodierung beteiligt.

Überprüfen Sie RakNet out beide es ist kostenlos Code herunterladen und die Diskussionsgruppen.

TCP ist in Ordnung, wenn Ihr Lauf auf einem LAN. Aber wenn Sie online spielen möchten, müssen Sie UDP verwenden und deine eigenen TCP-artige Schicht implementieren. Es ist notwendig, throw NAT-Router passieren

Sie müssen zwischen Peer-to-Peer-oder Client-Server-Kommunikation wählen. In Client-Server-Modell, Synchronisation und Zustand der Welt sind einfacher zu implementieren, aber Sie könnten einen Mangel an Reaktivität Online haben. In Pee-to-Peer es ist komplizierter, aber schneller für den Spieler.

Bewahren Sie keine Geschichte der Spieler-Action für Spiel Zweck (es tun, aber nur für die Wiedergabe-Funktionalität). Wenn Sie einen Punkt erreichen, wo es notwendig ist, bevorzugt jeden Spieler warten lassen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top