Ist ein Multiplayer-Spiel in JavaScript eine schlechte Idee? [geschlossen]

8

Was sind die möglichen Nachteile der Verwendung von (clientseitigem) JavaScript beim Erstellen eines Multiplayer-Spiels?

Spielbeschreibung: Es ist ein MMORPG / RTS. Das bedeutet, dass die Spieler aktiv zu Strukturen in der Welt beitragen und einen Großteil der Inhalte selbst erstellen.

jcora
quelle
Ich bin gespannt: Welchen Mechanismus verwenden Sie, damit der Client mit dem Server kommuniziert, und wie ist die Latenz? Welche Plattform verwenden Sie für den Server?
Wird
Der Server läuft auf meinem Netbook, auf dem Ubuntu Linux ausgeführt wird, und er ist in serverseitigem JavaScript geschrieben, das mit node.js ausgeführt wird.
JCora
Ich weiß nicht, warum ich diese Frage ursprünglich positiv bewertet habe. In eine Abwertung geändert und überlegt, eine enge Abstimmung abzugeben, weil "ist ___ eine gute Idee?" ist nie wirklich eine beantwortbare Frage. In meiner Antwort habe ich sogar darauf hingewiesen, dass die Frage nicht genau beantwortet werden kann.
Schockieren
Außerdem möchte ich den Titel in "Ist ein Multiplayer-Spiel in JavaScript eine schlechte Idee?" Ändern. würde die Frage verbessern. Auf den ersten Blick scheint dies eine triviale Änderung zu sein, aber die Neufassung der Frage als nach Nachteilen suchend macht sie verantwortungsbewusster als eine "Welche Technologie soll ich verwenden?" irgendwie Frage. Fragen "Ist diese Technologie gut?" lädt nur zum Axtschleifen ein.
Schockieren
1
Ich weiß nicht, was Mods denken, aber ich mag es jetzt viel besser. zurück zu upvote
jhocking

Antworten:

9

Es ist in Ordnung, wenn:

  1. Der Server sendet keine Informationen über Spieler hinter dem Sichtfeld des lokalen Spielers (muss serverseitig berechnet werden) an den lokalen Spieler (um Wallhacking zu verhindern).
  2. Alle Aktionen werden auf dem Server auf Verfügbarkeit überprüft, wenn ein Spieler die Aktionstaste drückt.
  3. Sie rendern nur auf dem Client - alle Aktionen werden auf dem Server ausgeführt und nur auf dem Client vorhergesagt.
  4. Alle zeitgesteuerten Aktionen sind serverseitig.
Triang3l
quelle
Ja, ich mache diese Dinge.
JCora
10
Bitte beachten Sie, dass diese Anweisungen für jedes Multiplayer-Spiel gültig sind , unabhängig von Sprache, Plattform oder was auch immer.
o0 '.
10

Ob Ihr Spiel für die JavaScript-Entwicklung geeignet ist oder nicht, hängt vom Spiel ab. Sie haben Ihr Spiel nicht beschrieben, daher können wir die Frage im Titel nicht beantworten.

Ich kann jedoch sagen, dass Ihr Hacking-Problem hier kein Problem darstellt. Nicht weil JavaScript nicht gehackt werden kann (es kann und leicht), sondern auch jede andere clientseitige Technologie. Einer der Grundpfeiler der Multiplayer-Spieleentwicklung ist "Vertraue niemals dem Kunden". Gestalte dein Spiel so, dass alles, was du vor Hacking schützen musst, auf dem Server ausgeführt wird, da der Client gehackt wird. Dies bedeutet, dass nur UI-Befehle vom Client gesendet werden (z. B. "Der Spieler hat auf die Schaltfläche" Bombe "geklickt") und die Ergebnisse der Spieleraktionen auf dem Server berechnet werden. Anschließend sendet der Server die Ergebnisse dieser Aktionen an den Client zurück.

Da Sie Ihr Spiel unabhängig von der Technologie, auf die Sie sich verlassen haben, unter der Annahme entwerfen sollten, dass die clientseitige Komponente gehackt wird, spielt die Hackbarkeit von JavaScript bei der Entscheidung, ob JavaScript verwendet werden soll oder nicht, keine Rolle.

jhocking
quelle
Vielen Dank. Ich werde meinen Beitrag bearbeiten und das Spiel jetzt beschreiben.
JCora
3
Niemals Niemals Niemals Niemals Niemals dem Kunden vertrauen, sei es sein Javascript oder etwas anderes!
the_e
1
Während alle Spielclients tatsächlich hackbar sind, sind einige hackbarer als andere.
Jonathan Connell
2
Das stimmt, aber die Unterscheidung ist irrelevant. Was macht es beim Entwerfen der Sicherheit für Ihr Spiel aus, wenn Option A schwerer zu hacken ist als Option B, wenn beide gehackt werden?
Schock
2

Leute können den Client-Code ändern, um zu betrügen, das ist ein Problem für jedes Multiplayer-Spiel. Wenn Reaktionsgeschwindigkeit oder schnelles Lösen mathematischer Aufgaben Teil des Spiels sind, können Sie Betrug nicht vollständig verhindern.

Für jedes andere Spielelement müssen Sie sicherstellen, dass der Client keine Informationen erhält und nicht erhalten kann, die dem Spieler verborgen bleiben sollen. Und natürlich muss der Server überprüfen, ob jede Aktion eines Spielers legal ist.

Das größte Problem, das ich in JavaScript-Spielen sehe, ist, dass viele Browser zum Stottern neigen, insbesondere Firefox war beim letzten Überprüfen ziemlich schlecht. Aus diesem Grund ist JavaScript keine gute Wahl für zeitkritisches Gameplay. Aber für rundenbasierte oder zumindest langsame Spiele kann JavaScript recht gut funktionieren.

aaaaaaaaaaaa
quelle
2

Das Ändern von Javascript-Variablen ist mit Tools wie Firebug (für Firefox) oder den integrierten Entwicklertools von Safari / Chrome recht einfach. Sie können einfach Javascript in die Konsole eingeben und es wird ausgeführt. Verlassen Sie sich aus Sicherheitsgründen in der Regel nicht auf die Clientseite. Abgesehen davon bietet Ihnen Javascript mit der Einführung des HTML5-Canvas-Elements einige echte Möglichkeiten für einfache Spiele (es gibt beispielsweise eine vollständige Javascript / HTML5-Version von Angry Birds).

Pjotterke
quelle