ProfilProfil
 Registrieren
 Login
Bild der WocheBild der Woche

(von Backslider)
Kommentare (0)
****

Weitere
User onlineBenutzer online
Gäste online: 10
Mitglieder online: Keine
Registrierte Mitglieder: 2116
Neustes Mitglied: onkel_keks

Lidgren Tutorial: Basic-Knowledge, Protokolle und Bewegung

Gehe zu Seite 1, 2  Weiter
Neue Antwort erstellen
 

 

Autor Nachricht
 
 
Razer
Member


Anmeldedatum: 31.05.2009
Beiträge: 1796

Antworten mit Zitat
BeitragVerfasst am: 30.05.2011, 19:32    Titel: Lidgren Tutorial: Basic-Knowledge, Protokolle und Bewegung

Guten Tag Community.
Aufgrund der Anfrage von messy habe ich mich gestern und heute hingesetzt und ein Lidgren Sample geschrieben.
Weiterer Grund war die häufige Nachfrage wie das geht.

Verwendete Lidgren-Version: Lidgren Network Gen3 - 2011/05/18
Inhalt: Server (Konsolenanwendung), Client (XNA Game)
Kommentiert: Ja
Weitere Information: XNA 4, .Net 4, C#, Visual Studio 2010

Was wird gezeigt?
Das Sample zeigt die Funktionsweise von Server und Client auf simple Weise, wie Protokolle funktionieren und welchen Sinn diese haben sowie die allgemeinen Grundlagen von Lidgren (Server suchen, Connecten, Message-Sending, Verwaltung, ...).

Wie wird es gezeigt?
Server:
- Verwaltet die Clients
- Leitet die Positionsänderung von Clients an alle restlichen weiter
- Meldet Connects/Disconnects an alle Clients

Client:
- Bewegen vom eigenen Spieler
- Anzeige aller anderen Clients
- Senden der Positionsangaben jede 1/3 Sekunde

Anmerkung
Bitte auch die "Protokoll.txt" lesen. Dort steht die Beschreibung des Protokolls sowie einige Informationen die man bezüglich dieses Themas beachten sollte.

Falls das hier gut ankommt schreibe ich vielleicht eine Serie, in der auch weitere Dinge wie Data-Loss, Latenzen, Cryptography, Message-Orders, uvm. (grade weil ich das Thema bald brauchen werde und es mich sehr interessiert).

Verbesserungsvorschläge und Korrekturen gern gesehen!


Download
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


JeReT
Member


Anmeldedatum: 19.07.2007
Beiträge: 3248
Wohnort: µnchen

Antworten mit Zitat
BeitragVerfasst am: 30.05.2011, 19:38    Titel:

Habs mir zwar noch nicht durchgelesen, aber ich finde es wirklich super, dass du das gemacht hast Smile
Werd es mir bei gelegenheit mal anschaun.
_________________
Idea Shapes
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger ICQ-Nummer


Shinobi
Member


Anmeldedatum: 15.09.2009
Beiträge: 582
Wohnort: NRW/Kreis GT

Antworten mit Zitat
BeitragVerfasst am: 30.05.2011, 19:56    Titel:

Coole Sache Smile
Werds mir auch mal morgen zu Gemüte führen
_________________
Sobalds Studium winkt, wieder Zeit zum Entwickeln, solang hiermit beschäftigt Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


Razer
Member


Anmeldedatum: 31.05.2009
Beiträge: 1796

Antworten mit Zitat
BeitragVerfasst am: 30.05.2011, 20:01    Titel:

Ich muss persönlich sagen dass mir dieses Themengebiet sehr gut gefällt.
Und da hier zu viele immer das (im Grunde) selbe gefragt haben: Wie man Lidgren verwendet,
hab ich mir gedacht mach ich das doch mal.

Das Sample wurde mit 6 laufenden Clients getestet: fehlerfrei.


Das Prinzip zeigt eben gut, wie man sowas macht. Und da es doch noch schwereres gibt, werde ich ggf. das Sample ausbauen und z.B. Schüsse einbauen.

Denn es gibt doch noch viele wichtige Dinge zu Lernen. Zum Beispiel was Machen wenn Packete verloren gehen, wie man Vorausberechnet und vorallem wie man Kritische Situationen meistert ohne das Spiel für einen oder mehrere stark zu beeinflussen.


Für die die folgendes Fragen: Warum ruckelt das Bewegen denn so?
Das liegt daran, dass es nicht gedacht ist, Frame-genaue Bewegungen zu machen. Normal sendet man die Position nur alle (in dem Fall 1/3 Sekunden) um den Server nicht zu überlasten und die Datengröße gering zu halten.

Clients berechnen daher normal die Position vorraus, falls mal eine Weile keine neue Positionsangabe ankommt, bzw. berechnet die Bewegung so, dass sie flüssiger wird.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


messy
Member


Anmeldedatum: 05.04.2011
Beiträge: 150
Wohnort: Flensburg

Antworten mit Zitat
BeitragVerfasst am: 30.05.2011, 20:46    Titel:

Hey Razer,

erstmal super, dass du das so schnell geschafft hast! Und noch besser ist, dass du weiterhin Lust darauf hast. Wink

Klappt auch wunderbar. Was ich interessant finde ist, dass der Client bestimmt wie oft gesendet wird. Der Server schickt immer, wenn er Daten empfängt. Ich hatte das bisher immer so gelöst, dass der Server seine festen Sendezeiten hat.

Super auskommentiert und verständlich geschrieben. Wenig, aber schlauer Code (so weit ich das beurteilen kann Wink ). Nur deine Spielfigur lässt ein wenig zu wünschen übrig. Very Happy

Leider sind die Aspekte, die mich brennend interessieren in diesem vorzüglichen Starter-Tutorial noch nicht drin. Was mich interessieren würde (und was schon auf deiner Liste steht) ist, wie stellt man flüssige Bewegungen da und wie geht man mit Latenzen und Data-Loss um. Lidgren bietet ja die Möglichkeiten eben dies zu simulieren.

Erstmal vielen Dank für deine Arbeit.
_________________
XNA 4.0 - PC/Phone
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden


Razer
Member


Anmeldedatum: 31.05.2009
Beiträge: 1796

Antworten mit Zitat
BeitragVerfasst am: 30.05.2011, 20:58    Titel:

Sammelt mal was euch interessiert. Ich werd mich dann mal dran setzen und dazu ein paar Artikel verfassen (ggf. in meine Blog, weiß nicht ob ich XNAmag überschwemmen darf Razz) und mach Samples dazu.

Data-Loss und Latenzen interessieren mich persönlich mehr.
Das mit den Animationen muss ich mir selbst erstmal anschauen, da bin ich noch nicht wirklich fit drin (hab das noch nie gebraucht).

Es gibt viele Wege nach Rom. Das Problem ist, wenn der Server die Sendezeit beschränkt, dass dieser ggf. High-Priority Nachrichten später verzögert sendet. Da müsste man sich ein Prioritäten System programmieren.

Ich hab auch schon überlegt ob ich nicht ein kleines Framework als Aufsatz für Lidgren programmieren sollte ... ^^

Man müsste noch verdammt viel optimieren, Prioritäten setzen und die Abwicklung der Aufgaben / Messages besser umsetzen,
aber das würde den Rahmen sprengen Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


messy
Member


Anmeldedatum: 05.04.2011
Beiträge: 150
Wohnort: Flensburg

Antworten mit Zitat
BeitragVerfasst am: 30.05.2011, 21:07    Titel:

Da fällt mir auf:
Zitat:
- Senden der Positionsangaben jede 1/3 Sekunde


Dein f_sendInterval ist allerdigns auf 0.03f gesetzt.

Zitat:
Data-Loss und Latenzen interessieren mich persönlich mehr.
Das mit den Animationen muss ich mir selbst erstmal anschauen, da bin ich noch nicht wirklich fit drin (hab das noch nie gebraucht).

Mich interessiert das auch, aber ich habe es nicht hinbekommen. Wink
Noch nie gebraucht? Wie bist du denn bisher mit den ruckligen Bewegungen umgegangen?

Warum eigentlich ReliableUnordered und nicht Unreliable? Reicht das nicht aus?
_________________
XNA 4.0 - PC/Phone
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden


Razer
Member


Anmeldedatum: 31.05.2009
Beiträge: 1796

Antworten mit Zitat
BeitragVerfasst am: 30.05.2011, 21:35    Titel:

Hmm, ja in manchen Fällen könnte man Unreliable nutzen.
Wichtig ist bspw. beim Übertragen der ID zum Clienten, dass dieser diese sicher bekommt um Fehler später zu verhindern.
Da passt das.

Ich berücksichtige das. Werde das Sample spätestens morgen updaten, denn ich hab noch ein paar Dinge die ich dringend einbauen will.


Gerade eben habe ich z.B. Threading in den Server eingebaut, denn das ist eigentlich doch sehr wichtig.
Und zum Sendeintervall: Da hab ich mich wohl vertan ...

Es kommt jedenfalls noch ein bisschen was dazu Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


messy
Member


Anmeldedatum: 05.04.2011
Beiträge: 150
Wohnort: Flensburg

Antworten mit Zitat
BeitragVerfasst am: 30.05.2011, 21:39    Titel:

Hehe, okay. Ich bin gespannt. Wink

Ich schreibe trotzdem weiter, wenn mir etwas auffällt.

Das Sendeintervall soll 0.3 Sek sein oder? Sonst würde doch ein zu großer Traffic auftreten.
_________________
XNA 4.0 - PC/Phone
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden


Razer
Member


Anmeldedatum: 31.05.2009
Beiträge: 1796

Antworten mit Zitat
BeitragVerfasst am: 30.05.2011, 21:45    Titel:

Da es momentan 0.03 ist, nein das passt so.
Ich bin mir auch nicht 100% sicher was das richtige Intervall ist. Traffic ist bei solch einem Spiel jetzt noch nicht ganz so schlimm.
Also ich mein damit, die paar Positionsangaben machen da nicht so viel aus ^^
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


messy
Member


Anmeldedatum: 05.04.2011
Beiträge: 150
Wohnort: Flensburg

Antworten mit Zitat
BeitragVerfasst am: 30.05.2011, 21:50    Titel:

Auch wenn das bei diesem Spiel noch nicht schlimm, glaube ich, dass ca. 33 Snapshots die Sekunde doch recht viel ist.

Noch was anderes:
Der Client empfängt die Positionsdaten der anderen Spieler und aktualisiert diese. Seine eigenen Angaben werden aber nicht vom Server "geprüft" oder?
_________________
XNA 4.0 - PC/Phone
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden


Razer
Member


Anmeldedatum: 31.05.2009
Beiträge: 1796

Antworten mit Zitat
BeitragVerfasst am: 30.05.2011, 22:03    Titel:

Wie meinst du das mit geprüft?
Ein Client sendet seine Position und der Server verteilt sie an alle anderen.

Zu prüfen gibt es in diesem Fall nichts Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


messy
Member


Anmeldedatum: 05.04.2011
Beiträge: 150
Wohnort: Flensburg

Antworten mit Zitat
BeitragVerfasst am: 30.05.2011, 22:48    Titel:

Ich meine dem Cheaten vorbeugen, aber das ist für ein Sample zu weit ausgeholt. Very Happy
Also, der Client könnte seine Position manipulieren und an den Server schicken. Der Server verteilt diese blind ohne diese gegenzuprüfen. Smile
_________________
XNA 4.0 - PC/Phone
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden


Razer
Member


Anmeldedatum: 31.05.2009
Beiträge: 1796

Antworten mit Zitat
BeitragVerfasst am: 30.05.2011, 23:08    Titel:

Ja, wie du sagst, sowas sprengt das Sample.
Natürlich sollte man sowas einbauen Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


messy
Member


Anmeldedatum: 05.04.2011
Beiträge: 150
Wohnort: Flensburg

Antworten mit Zitat
BeitragVerfasst am: 30.05.2011, 23:43    Titel:

Ich habe mal versucht einen flüssigen Bewegungsablauf einzubauen. Klappt soweit bis auf ein paar Kleinigkeiten. Ich poste morgen mal mein Ergebnis. Jetzt hindern mich meine Kopfschmerzen am weiter machen. Sad
_________________
XNA 4.0 - PC/Phone
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden


Beiträge der letzten Zeit anzeigen:   
 
Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de