ich entwickle grade ein Spiel (www.LanMatrix.de.vu)
fürs netcode benutze ich grade die Windows Sockets (also die forgefertigten komponenten die bei Delphi dabei sind). Dummerweise funktioniert das nur gut im LAN. Übers Internet ist das viel zu lahm.
Ich habe gehört, dass die meisten Spiele UDP fürs Netzwerk benutzen, da das angeblich viel schneller ist.
Ich kann nur keine guten deutschsprachigen Delphi Tuts zu dem Thema finden. Vielleicht kennt ja jemand ein gutes Tut dazu oder kann mir sonst irgentwelche Tipps zu Netzwerkcode geben.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Die normalen Sockets basieren auf TCP/IP, das im Gegensatz zu UDP automatisch für Fehlerkorrektur sucht. Wenn ein TCP/IP-Paket nicht gesendet werden konnte oder fehlerhaft ist, sorgt das Protokoll automatisch für ein Neusenden des Paketes, was übers INet recht oft passieren kann.
Bei UDP musst du dich selbst darum kümmern, oder einfach damit leben das mal ein Paket nicht korrekt ankommt, was man aber mit guter Prediction kompensieren kann.
Aber die Geschwindigkeit der Verbindung hängt im Normalfall weniger vom Protokoll ab (TCP/IP hat zwar nen größeren Overhead durch den größeren Header, aber das spielt eigentlich nicht wirklich eine Rolle), sondern mehr von der Art und Weise wie du deine Kommunikation implementierst.
Sag mal genauer wie du das regelst und welche Vorhersagen du nutzt. Das ist nämlich das "Geheimniss" moderner Titel wie UT2k4, bei denen hauptsächlich die Vorhersage (egal ob Server- oder Clientseitig) für ein flüssiges Spielen (UT2k4 ist laut Readme bis zu nem Ping von 300ms noch spielbar) sorgen.
also wenn man seinen spieler bewegt dann dann werden 2 variablen davon betroffen gemacht ... local_move und local_strafe. diese werden im netzwerk übergeben. Heisst: der client lässt die charactere sich solange mit dem übergebenen speed bewegen bis dieser und die position geupdated werden.
(lol collision hab ich dafür auch noch nich weil die n bisl lahm is)
Aber eigentlich ist das also so das das Protokoll kaum eine Rolle spielt und ich muss das nur optimieren ?
Nananana....
Also UDP ist schon schneller. Das liegt aber daran das alles sozusagen Bruteforce gesendet wird und auch Pakete verloren gehen können(wie SoS bereits erwähnte), außerdem ist nicht 100%ig gewährleistet, dass die Pakete in der richtigen Reihenfolge ankommen (wobei das nicht so tragisch ist).
Außerdem ist es bei den meisten Multiplayer Spielen auch nicht so tragisch wenn mal ein Positions-Paket verloren geht.
Warum verwenden wohl die meisten Online Games UDP, nur weil UDP vom Hörensagen schneller sein soll?
Das Problem ist, daß man auf dem Client nicht alles vorhersagen kann. Bei der eigenen Spielerbewegung ist das natürlich ohne Probleme möglich. Da reicht es aus sicherzugehen, daß die Position auf dem Server nicht allzuweit abweicht. Auch Raketen,Plasmakugeln usw..müssen eigentlich nur einmal übertragen zu werden, aber bei gegenerischen Spielern ist das schon schwieriger oder unmöglich. Außerdem müssen einige wichtige Vorgänge unbedingt vom Server bestätigt werden, weil sonst die Gefahr des Cheatens zu groß ist und das Spiel auch nicht mehr fair ist. Auf dem Server, der ja letztendlich die Endscheidung triftt, ob man getroffen wurde muß z.B. ein Geschoß abgefeuert werden, damit die Position für alle gleich ist, und nicht auf dem Client. Dazu kommt noch, daß TCP die Übertragungsgeschwindigkeit immer weiter drosselt, wenn Packete verloren gehen.
Das Protokoll macht sehr wohl einen Unterschied. Da TCP die Reihenfolge der Pakete garantiert werden alle Pakete gebuffert und nicht an die Anwendung weiter gegeben bis das verlorene Paket eintrifft. Wenn dich aber nur die aktuelleste Position des Spielers interessiert ist dir egal ob die vorletzte Positions Meldung verloren geganen ist oder nicht wenn schon eine aktuellere vorhanden waere.
Zudem versucht TCP schlau zu sein und wartet mit dem Anfordern einer Wiederholungssendung ein Wenig, da es eine Verstopfung durch welche das Paket verloren ging ja nicht noch verschlimmern will. Wenn nun das Paket immer noch nicht kommt wird immer laenger gewartet.
Die immer laenger werdende Wartezeit gekoppelt mit der einhaltung der Reihenfolge macht das TCP Protokoll ungeeignet fuer echtzeit sachen.
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.