DirectPlay-Problem(Daten kommen zeitversetzt an)
Übersicht

![]() |
AcidRainBetreff: DirectPlay-Problem(Daten kommen zeitversetzt an) |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
ich habe einen Lan-Egoshooter programmiert(wie gesagt mit DirectPlay) und die Daten(x,y,z, u.s.w...) kommen zeitversetzt beim Client an. Ich weiß,dass es natülich nicht gut ist,bei jedem Schleifendurchlauf das gesamte Online Sende-Empfang-Spektakel durchzuziehen,aber wenn ich das beispielsweise nur jeden zehnten Schleifendurchlauf ausführe,ist es immernoch zeitversetzt.Auch das ändern der Wichtigkeit der Nachricht bringt keine Änderung.Wir haben es auf einer Lan mit einem 100Mbit Hub getestet. es wird ein Datenstring von 42 Zahlen gesendet. Danke schonmal. |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zeitversetzt ist alles immer ein wenig, aber wenn schon 3-4 Sekunden Wartezeit sind, dann ist das nicht normal!
Wie hast du das Netzwerk aufgebaut? mit einem Server und vielen clienten, oder nur mit clienten? |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
AcidRain |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein Client.
Code: [AUSKLAPPEN] ;---Online------------
;---in------ <--- inSF = RecvNetMsg() wasSF = NetMsgType() If wasSF > 0 And wasSF < 100 Then spielernummerSF = NetMsgFrom() spielernameSF$ = NetPlayerName$(spielernummerSF) nachrichtSF$ = NetMsgData$() ;entschlüsseln NeuPXTCZ=Mid$(nachrichtSF$,1, 8) NeuPYTCZ=Mid$(nachrichtSF$,9, 8) NeuPZTCZ=Mid$(nachrichtSF$,17,8) svsg =Mid$(nachrichtSF$,25,1) NeuRoll =Mid$(nachrichtSF$,26,5) NeuPitch=Mid$(nachrichtSF$,31,5) NeuJaw =Mid$(nachrichtSF$,36,5) Rauschue=Mid$(nachrichtSF$,41,1) NPXTCZ=Trim(NeuPXTCZ/1000) NPYTCZ=Trim(NeuPYTCZ/1000) NPZTCZ=Trim(NeuPZTCZ/1000) nsvsg =Trim(svsg) NRoll=Trim(NeuRoll) NPitch=Trim(NeuPitch) NJaw=Trim(NeuJaw) ;setzten |
||
![]() |
AcidRain |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe das Standardfenster für DP genutz,Ein Server wird erstell,und ein Client kann nur joinen,sonst gibts Probleme...
Code: [AUSKLAPPEN] ;---Online------------
;---in------ <--- inSF = RecvNetMsg() wasSF = NetMsgType() If wasSF > 0 And wasSF < 100 Then spielernummerSF = NetMsgFrom() spielernameSF$ = NetPlayerName$(spielernummerSF) nachrichtSF$ = NetMsgData$() ;entschlüsseln NeuPXTCZ=Mid$(nachrichtSF$,1, 8) NeuPYTCZ=Mid$(nachrichtSF$,9, 8) NeuPZTCZ=Mid$(nachrichtSF$,17,8) svsg =Mid$(nachrichtSF$,25,1) NeuRoll =Mid$(nachrichtSF$,26,5) NeuPitch=Mid$(nachrichtSF$,31,5) NeuJaw =Mid$(nachrichtSF$,36,5) Rauschue=Mid$(nachrichtSF$,41,1) NPXTCZ=Trim(NeuPXTCZ/1000) NPYTCZ=Trim(NeuPYTCZ/1000) NPZTCZ=Trim(NeuPZTCZ/1000) nsvsg =Trim(svsg) NRoll=Trim(NeuRoll) NPitch=Trim(NeuPitch) NJaw=Trim(NeuJaw) ;setzten RotateEntity TestCube2,NPitch,NJaw,NRoll,0 PositionEntity TestCube2,NPXTCZ,NPYTCZ,NPZTCZ If nsvsg=1 Then CreateBullet2(TestCube2) EndIf If Rauschue=1 Then LightColor MLicht2,0,0,ls*2.5 LightRange MLicht2,5 Else LightColor MLicht2,0,0,255 LightRange MLicht2,2 EndIf ;---out----- ---> ;Daten,die gesendet werden sollen: PositionTCX=EntityX(TestCube)*1000 PositionTCY=EntityY(TestCube)*1000 PositionTCZ=EntityZ(TestCube)*1000 RollSF=EntityRoll(TestCube) PitchSF=EntityPitch(TestCube) JawSF=EntityYaw(TestCube) ;senden SendNetMsg 1,LSet$(Int(PositionTCX),8)+LSet$(Int(PositionTCY),8)+LSet$(Int(PositionTCZ),8)+LSet$(Int(svs),1)+LSet$(Int(RollSF),5)+LSet$(Int(PitchSF),5)+LSet$(Int(JawSF),5)+LSet$(Int(Rauschjn),1),spielerSF,0,0 |
||
- Zuletzt bearbeitet von AcidRain am Sa, Feb 10, 2007 17:36, insgesamt einmal bearbeitet
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() Du könntest anstatt DP UDP verwenden! Das ist schneller und benötigt nur einen Port! DirectPlay hingegen benötigt mehrere Ports, und ist alleine deswegen schon für Online-Games ungeeignet! Dazu kommt, dass UDP viel schneller ist! |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
AcidRain |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja,das stimmt,aber ich hab versucht mir so weinig Arbeit wie möglich zu machen.Ich hatte jedoch ein anderes Spiel mit udp programmiert,dort gab es den gleichen Fehler.Ich spiel noch n bisschen den Debugger und werde mir jetzt wohl doch die Mühe machen mit UDP ![]() Thx |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vieleicht ist auch einfach dein PC nicht schnell genug, alle Daten zu verarbeiten. Aber das glaube ich weniger! | ||
Twitter
Download Jewel Snake! Windows|Android |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hast du Mal überprüft ob es überhaupt dein Code ist der ein Problem ist?
Vielleicht hast du ja ein USB basierendes Modem, die haben massive Latenzzeiten, wenn deine CPU ausgelastet ist (und Blitz lastet zu 100% aus!). Oder du versuchst mit einer 56k Leitung zu arbeiten. Sonst kommt mir eigentlich nur ein Grund in den Sinn: Du versendest unzählige Pakete, versuchst also hunderte bis tausende pro Sekunde zu versenden, anstatt die Daten intelligent zu bündeln. Dann wirst du ebenfalls in Probleme kommen. ODER: Ein anderer Teil deines Codes zieht so massiv an der Leistung das das Programm wartet. Glaube ich jedoch am wenigsten. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
AcidRain |
![]() Antworten mit Zitat ![]() |
---|---|---|
Tja,ich habs jetzt in UDP nochmal probiert und die Dateien intelligent gebündelt-gleiches Ergebnis...Keine Ahnung,vielleicht liegts am Pc meines Freundes!
Trotzdem danke für Eure schnellen Antworten und Hinweise ![]() |
||
![]() |
AcidRain |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja,lag am Pc meines Freundes. | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group