Zitat:
TCP ist für ein Spiel in den meisten Fällen unbrauchbar. Beispiel: Wenn das Datenpaket mit der aktuellen Geschwindigkeit und Position verloren geht, dann wird es wiederholt. Kommt es dann schließlich an, ist es zu spät - die Daten sind nicht mehr aktuell. Genau deswegen ist
TCP auch für VoIP und Videokonferenzen ungeeignet.
Allerdings kannst du dir bei
TCP sicher sein,
dass es wirklich angekommen ist. Bei UDP hingegen kannst du das nicht und musst deshalb wirklich kontinuierlich Daten senden. Auch wenn der Client immer eine Antwort sendet, wer garantiert mir, dass diese wirklich angekommen ist?
Ein weiteres Problem ist:
Nehmen wir an, in dem Spiel haben wir 20 Figuren, die jedes Frame ihre Richtung ändern können. Hinzu kommen weitere Sondertasten (Schießen, Waffe wechseln, etc), gehen wir mal von 16 Tasten, also 2 Byte aus. Hinzu kommt für jede Figur noch mal an Header, also noch mal 2 Byte. Macht zusammen 4 Byte pro Figur.
Das können bei 20 Figuren und 50 Frames pro Sekunde maximal 1000 Datensätze sein. Bei 4 Clients und 4 Byte pro Figur macht das schon mal 15,625 KB Upload/Sekunde. Da kommt jeder normale DSL Anschluss ins Schwitzen.
Bei UDP musst du jetzt davon ausgehen, dass ein Packet verloren gegangen ist und immer noch die Aktuelle Position mitsenden. X,Y noch mal 8 Byte zusätlich (integer). Macht schon 12 Byte pro Figur. Bei Maximalbelastung wären das dann 31,25 KByte Upload!
Natürlich muss man auch bei
TCP ab und zu die Position der Objekte übertragen um eventuelles Auseinanderdriften zu verhindern.
Bei Lokalen Netzwerk spielen ist es Praktisch egal was du nimmst. Aber hier würde auch ich UDP Favoritisieren. Aber beim Internet muss man (je nach Spiel) den Upload im Auge behalten...
Ich hoffe das war jetzt kein kompletter Müll, aber das ist meine aktuelle Meinung zu dem Thema. Ich programmiere gerade eine Netzwerkengine für mein Spiel (Link siehe Signatur) und wenn es da Irgendwelche, neuen Erkenntnisse geben sollte (die mich eines anderen Belehren), dann werde ich euch diese nicht vorbehalten.
Ich glaube arbu man meinte nicht die
Standart Protokolle sondern das Spiele-Byteebene-Protokoll.
Ich werde folgendes versuchen: (Beispiel)
Code:
1. Byte = 0 //Stream Start
<--Block Start-->
2. Byte = 1 //Header (Irgendwelche Nummern z.B. 1 = Figur, 2 = Haus, 3 = Neues Objekt)
3. Byte = 10//Nr. (Figur Nr. 10)
4. Byte = B1//Richtung, Tasten byte 1
5. Byte = B2//Richtung, Tasten byte 2
<--Block Ende -->
<--Block Start-->
6. Byte = 3 //Header (Irgendwelche Nummern z.B. 1 = Figur, 2 = Haus, 3 = Neues Objekt)
7. Byte = 10//Typ (Kiste)
8. Byte = X //X Position (4 byte)
9
10
11
12. Byte = Y//Y Position (4 byte)
13
14
15
16
<--Block Ende -->
.
.
.
17. Byte = 255 //Stream Ende
Igel457