Netzwerkspiel Überlegung

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

kog

Betreff: Netzwerkspiel Überlegung

BeitragMi, Dez 28, 2011 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Tag

Wie vielleicht ein paar schon gesehen haben, arbeite ich zurzeit an einem Netzwerkspiel.
Bisher handhabte ich es so, das wenn geschossen wird, eine Variabel = 1 gesetzt wird und wenn nicht 0.
Der State wurde am Server mitgeteilt und weiterversendet....

Der Server und die anderen Clients berechnen nun das Schiessen auch automatisch (nur der Abstand / Zeitlimit, nicht die kollision!).

Doch vorhin machte ich mir gedanken und da kam mir plötzlich in den Sinn, Sch*****.... das gibt ja verzögerungen je nach dem und stimmt überhauptnicht überein und ein paar Millisekunden können bei der Kollision entscheident sein.

Nun hab ich die Frage an euch (Community), habt ihr einen vorschlag wie ich es anderst bewerkstelligen könnte? ohne jeden Schuss senden zu müssen?

Freundliche grüsse
k.o.g.

ToeB

BeitragDo, Dez 29, 2011 4:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei einem 3D Spiel z.B. einfach auf das "fliegen lassen" der Schüsse verzichten und einfach direkt den aufprall Punkt berechnen. In 2D würde ich es entweder so machen, das das anzeigen der Schüsse zwar unterschiedlich sein darf, die Kollisionsberechnung für den Schaden allerdings nur beim Server geschieht und damit wieder bei allen gleich ist. Um das ganze dann besser aussehen zu lassen, würde ich die Schüsse entweder wirklich auch nur vom Server auf den aufprall-Punkt prüfen lassen und dann an alle schicken und dann beim Client einfach eine sehr schnell fliegende "kugel" darstellen, einfach des Effektes wegen.

Möchtest du aber wirklich diese Verzögerung haben in den Schüssen, bleibt dir allerdings nichts anderes übrig als darüber hinwegzusehen, das die Schüsse verzögert berechnet werden. Um das aber auch ein wenig gleich zu halten, solltest du das ganze über "Anfragen" handeln, sodass der Client nur "anfragt", ob er schießen "darf", also ob noch genug Schuss im Magazin sind usw. und wenn ja, schickt der Server gleichzeitig an alle das Client XY jetzt schießt (Und an alle heißt auch an Client XY, sodass er selber schießen kann).

Lg
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Hummelpups

BeitragSa, Dez 31, 2011 10:18
Antworten mit Zitat
Benutzer-Profile anzeigen
genau bzw wird ein neuer Schuss bei jedem Client vom Server erstellt und nicht
vom Clienten selber. Sollte der Server also nichts zurück senden, wird auch beim
CLienten selber sein eigener Schuss nicht angezeigt.

Habs so bei UT2D und ZombiePanic gemacht gehabt und klappte auch mit Minigun usw
sehr gut
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus

DAK

BeitragSa, Dez 31, 2011 13:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Was ich mir gedacht hätte, was funktionieren könnte, um die Darstellung dann auch noch möglichst synchron hinzukriegen wäre, dass man am Anfang des Spiels eine Spielinterne Uhr startet, die die Clienten mit dem Server synchronisieren. Jedes Mal, wenn der Server einen Schuss übermittelt, sendet er auch den Timestamp von wann er geschossen wurde, und so können sich die Clienten recht genau ausrechnen, wo er inzwischen sein sollte.
So z.B., wenn der Schuss auf 10000 ms erstellt wurde, und die Daten beim Clienten dann um 10020 ms ankommen, dann weiß er, dass er den Schuss 20 ms*Geschwindigkeit vom Startpunkt des Schusses erstellen muss. Dann ist es auch für die Spieler etwas nachvollziehbarer, als wenn sie auf ihrem Schirm den Schuss an sich vorbeigehen sehen würden, dann aber doch den Schaden kriegen.
Gewinner der 6. und der 68. BlitzCodeCompo

kog

BeitragSa, Dez 31, 2011 13:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau DAK, an so einer Lösung arbeitete ich schon den ganzen Tag, aber bekam keine Synchrone Uhr hin.

keine Ahnung wie ich das realisieren sollte, sodass auf nem Clienten mit 20 Fps gleich läuft wie auf einem Clienten mit 300 Fps...

versuchte mit der Unix "Uhr" eine Sync zeit zu definieren und dann den Stamp wieder zurückzusetzen... aber naja :/

Eine andere idee um es zu realisieren?

Mr.Keks

BeitragSa, Dez 31, 2011 16:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, ganz synchron wird es vermutlich eh nicht werden. Ich denke, man kann hinreichend genau sein, indem der Server den Zeitpunkt festlegt, zu dem geschossen wird, dann das Event rausschickt (muss keinen Timestamp haben) und alle Clients sich den Schuss dann eine halbe Roundtriptime weiter vorne erstellen. (Um dem Feuernden entgegenzukommen kann der Server auch bei sich dem Schuss schon eine halbe RTT des Feuernden Vorsprung geben und eventuell auch gleich den Hit mit übetragen, sollte der schon in diesem Abstand stattfinden.)

Bei Schnell-Feuer-Waffen weiß eh niemand so genau, ob Schüsse treffen und einzelne Treffer sind meist nicht entscheidend. Bei Sniper-Style-Waffen fallen Schuss und Treffer zusammen (da ist es eventuell fair, die Szene zur Berechnung eines Treffers um eine halbe RTT zurückzusetzen..), was genug Informationen gibt, um den Schuss auf allen Clients als Treffer darzustellen. Bei Raketen-Style-Waffen ist das Geschoss meistens so langsam, dass leichte Zeitungenauigkeiten sich nicht zwingen auf das Treffen/Nicht-Treffen auswirken.
MrKeks.net

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group