UDP - Speedproblem
Übersicht

![]() |
PucciniBetreff: UDP - Speedproblem |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi!
Ich hab mir mal alle UDP-Tuts so angeschaut und hab auch gleich nen Multiplayer geprogt! Mit 2 Spielern funtz das ganze wunderbar! Host, Client kommunizieren super! Nun mein Problem! Wenn ein weitere Spieler beitritt,geht die Performenc dahin! Dh, die Bewegungen kommen alle verzögert an! warum? aber so dermassen (ca2-3sec!) Wie macht ihr das mit den Positionsdaten senden? sendet ihr die in jedem schleifendurchlauf oder nur zu bestimmten zeiten?? so alle 10ms? Und ich habs so gemacht: Der CLient meldet sich beim Host, bekommt die bestätigung und joint. Der HOst sendet an alle Spieler das ein neuer da ist! (leider erscheint das nicht bei den anderen ???) Der host empfängt alle daten der Spieler und verteilt sie auch gleich wieder an alle! auser an den ders geschickt hat. wenn ihr code braucht sagt bescheid! aber vielleciht is das ja auch ein algemeiner fehelr und ich bin nur zu dumm! ![]() |
||
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM www.ragesoft.de Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39 |
![]() |
tft |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi ...
machst du das über Lan . Oder über einen rechner? |
||
TFT
https://www.sourcemagic.ch Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!! |
![]() |
Puccini |
![]() Antworten mit Zitat ![]() |
---|---|---|
Über WLAN-LAN (2 Rechner gehen über WLAN-Router und der 3. is mit kabel an den router angeshlossen!) wenn nur 2 zusammen spielen gehts ! sobald aber der 3. hinzu kommt geht nix mehr wirklich! ausserdem sehen sich die 2 spieler nicht!
hier der Host: Code: [AUSKLAPPEN] Function host()
If RecvUDPMsg(stream_in) msgfrom=UDPMsgIP(stream_in) If ReadLine(stream_in)="SEARCH" WriteLine stream_out,"FOUND" SendUDPMsg stream_out,msgfrom,7022 End If End If If RecvUDPMsg(stream) ;While msgtype=ReadByte(stream) msgfrom=UDPMsgIP(stream) msgport=UDPMsgPort(stream) Select (msgtype) Case 1 ;neuer Spieler playername$=ReadString(stream) msg(playername$+" betritt das Spiel!") For p.player=Each player WriteByte(stream,1) WriteInt(stream,msgfrom) WriteString(stream,playername$) SendUDPMsg(stream,p\ip,p\port) Next p.player=New player p\ip=msgfrom p\port=msgport p\name$=playername$ p\ping=MilliSecs() WriteByte(stream,3) ;Bestätigung des Spielers WriteInt(stream,Host_IP) WriteString(stream,nickname$) ;Nickname SendUDPMsg(stream,msgfrom,msgport) Case 2 ;Spielerdaten playerx=ReadInt(stream) playery=ReadInt(stream) For p.player=Each player If p\ip=msgfrom Then p\x=playerx p\y=playery p\ping=MilliSecs() Else WriteByte(stream,2) WriteInt(stream,msgfrom) WriteInt(stream,playerx) WriteInt(stream,playery) SendUDPMsg(stream,p\ip,p\port) End If Next End Select End If For p.player=Each player WriteByte(stream,2) WriteInt(stream,Host_IP) WriteInt(stream,x) WriteInt(stream,y) SendUDPMsg(stream,p\ip,p\port) Next End Function und hier der client: Code: [AUSKLAPPEN] Function client()
If RecvUDPMsg(stream) msgtype=ReadByte(stream) Select (msgtype) Case 1 ;Neuer Spieler beigetreten IP=ReadInt(stream) playername$=ReadString(stream) msg(playername$+" betritt das Spiel!") p.player=New player p\ip=IP p\name$=playername$ Case 2 ;Spielerdaten erhalten playerid=ReadInt(stream) For p.player=Each player If p\ip=playerid Then p\x=ReadInt(stream) p\y=ReadInt(stream) p\ping=MilliSecs() End If Next End Select End If WriteByte(stream,2) WriteInt(stream,x) WriteInt(stream,y) SendUDPMsg(stream,Host_IP,host_port) End Function :< woran liegt das? ich seh nich was ich flasch mache! bin ich zu nahe am bildschirmoder was?? |
||
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM www.ragesoft.de Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39 |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
dein Host sieht höchst schräg aus sorry.
Du gehst 2x durch alle Player und sendest allen scheinbar alles. Der Host sendet jedoch nur allen anderen Spielern (und die spieler unter einander senden garnichts) Auch wenn der Spieler eine Nachricht erhält mit Positionen, liest du die Positionen aller Spieler aus, was auch viel zu viel ist. Sende jede Nachricht einzeln! (das heisst für jeden Spieler eine einzelne Message das es ein Positionsupdate gab) Dann sende nicht alle 0.1ms eine nachricht, damit stirbt dir Wireless auch nicht postwendend weg. Es gibt keine Netzverbindung die derart schnell wäre, es ist ausreichend, wenn du alle 5ms+ sendest, damit gibts immer noch 200 updates pro sekunde (also 3x soviele wie frames wenn du das einigermassen intelligent gelöst hast) Den rest kannst bzw. musst du interpolieren! |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Puccini |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also,
ich mach das so: jeder client schickt seine daten an den host. (MsgType 1) Wenn der host das erhält, schickt er allen anderen Spielern die neuen Positionen des Spielers+ die Identität des Spielers (damit die wissen wer nun gerade sich bewegt hat!) und die daten des Spielers der gesendet hat, werden beim host auch aktuallisiert! Am ende jeder schleife schickt der Host dann seine Daten an alle Spieler! Ich wollt das nich so machen das jeder spieler jedem spieler seine daten schickt! das war mir dann doch zuviel traffic in meinen augen! Dein Tip mit den alle 5ms senden find ich gut ![]() ![]() |
||
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM www.ragesoft.de Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39 |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hast natürlich recht ... hab im "rasch" drüberlesen was kleines übersehen. Wär schon recht sinnfrei gewesen alle auf einmal zu syncen ![]() Allerdings empfehle ich sehr das du "Empfangen" und "Senden" von daten trennst, also nicht erst schauen "kam was" und dann immer deine daten auch sendest sondern immer schauen ob was kommt, die sendefunktion aber nur alle X ms. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Puccini |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich hab mir das jetzt so gedacht beim Host:
Code: [AUSKLAPPEN] If MilliSecs()-sendtime>5 Then
For k.player=Each player For p.player=Each player If k\ip<>p\ip Then WriteByte(stream,2) ;Spielerpositionen WriteInt(stream,p\ip) WriteInt(stream,p\x) WriteInt(stream,p\y) SendUDPMsg(stream,p\ip,p\port) End If Next WriteByte(stream,2) ;Host-Position WriteInt(stream,Host_IP) WriteInt(stream,x) WriteInt(stream,y) SendUDPMsg(stream,p\ip,p\port) Next sendtime=MilliSecs() End If könnte das funktionnieren?? |
||
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM www.ragesoft.de Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39 |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
potentiell ja | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Puccini |
![]() Antworten mit Zitat ![]() |
---|---|---|
oki! ich werd das heute mal testen!
aber is es nich dumm 2mal alle spieler zu druchlaufen! wenn da jetzt 50 spieler dasind is das ne ganze menge! muss doch auch einfahcer gehen oder? -.- |
||
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM www.ragesoft.de Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39 |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Muss es?
Net umbedingt, wenn alle von allen etwas wissen müssen leider zwangsweise eher nicht ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Puccini |
![]() Antworten mit Zitat ![]() |
---|---|---|
eh wie jetzt?? ^^
es soll ja so sein das jeder spieler dem host seine position schickt! der erhält das, speichert die neuen werte und wenn 5ms um sind schickt er die kompletten daten aller spieler an alle spieler! hmm... |
||
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM www.ragesoft.de Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39 |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Jopp genau so. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group