DirectPlay-Problem(Daten kommen zeitversetzt an)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

AcidRain

Betreff: DirectPlay-Problem(Daten kommen zeitversetzt an)

BeitragSa, Feb 10, 2007 17:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Feb 10, 2007 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Feb 10, 2007 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Feb 10, 2007 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Feb 10, 2007 17:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Rolling Eyes
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

BeitragSa, Feb 10, 2007 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Very Happy
Thx

Tankbuster

BeitragSa, Feb 10, 2007 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Feb 10, 2007 17:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Feb 10, 2007 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Very Happy

AcidRain

BeitragSa, Feb 10, 2007 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja,lag am Pc meines Freundes.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group