UDP - Auf einem PC geht - über LAN nicht richtig

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

onkelz89

Betreff: UDP - Auf einem PC geht - über LAN nicht richtig

BeitragSo, Jun 07, 2009 16:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

erstmal der Code:

Code: [AUSKLAPPEN]
Graphics 640,480,0,2
SetBuffer = BackBuffer()

Global art$,save$
Global timer=CreateTimer(20)


Global play[35],geg[35]

For i=0 To 350 Step 10
play[i/10]=LoadImage("DATA/Car1.bmp")
MidHandle play[i/10]
RotateImage play[i/10],i
geg[i/10]=LoadImage("DATA/Car2.bmp")
MidHandle geg[i/10]
RotateImage geg[i/10],i
Next

Global x#,y#,xx#,yy#,grad,dd=10
Global speed#=1

CountHostIPs(Input("IP des Anderen?")) ;Umwandeln der eingegebenen String-IP nach IntegerIP
IP=HostIP(1) ;Abspeichern der ersten möglichen Umgewandelten IP
host=Input("Spielernummer(0/1)?") ;Spielernummer zum Bestimmen des Ports, wenn das Programm auf 2PCs läuft kann die nummer gleich sein
stream=CreateUDPStream(6000+host) ;Erstellen eines UDPStreams zum Senden und Empfangen
Repeat
   Cls
   

   
   
   speed=speed*0.98
   If speed<0 Then speed=0
   x=x+Sin(grad*10)*speed
   y=y-Cos(grad*10)*speed
   If KeyDown(200) Then
      speed=speed*1.31
      If speed=0 Then speed=1
   ElseIf KeyDown(208) Then
       speed=speed*0.9
   EndIf
   If KeyDown(203) Then grad=grad-1
   If KeyDown(205) Then grad=grad+1
   
   If grad<0 Then grad=35
   If grad>35 Then grad=0


   recv=RecvUDPMsg(stream);Nachrichten empfangen
   If(recv<>0) ;Wenn eine Nachricht da ist
      art=ReadString(stream)
      dd=RSet(art,Len(art)-Instr(art,"#"))
      xx=LSet(art,Instr(art,"/")-1)
      save = LSet(art,Instr(art,"#")-1)
      yy=RSet(save,Len(save)-Instr(save,"/"))
   EndIf
      
   
   If x>640 Then x=630
   If x<0 Then x=0
   If y>470 Then y=470
   If y<0 Then y=0
         
   WriteString(stream,x+"/"+y+"#"+grad)
   SendUDPMsg(stream,IP,6001-host) ;Absenden einer Nachricht
   

   DrawImage geg[dd],xx,yy
   DrawImage play[grad],x,y
   
   
   WaitTimer(timer)
   Flip
Until KeyHit(1)
CloseUDPStream stream ;Stream schließen



Das Auto vom Gegner hat erstens eine leichte Verzögerung... diese erkläre ich mir einfach durch die Verbindung ... allerdings ... 100MBit/s und nur ein String... naja wie auch immer....


Problem:
Auto drehung (Variable dd) wird i-wie nicht mit übermittelt... zumindest dreht sich das Gegnerauto nicht (WENN ich im LAN spiele... auf einem PC geht es doch)

Erkennt Jemand den Fehler oder auch gute Tuts für UDP / TCP allg. um kleinere Online/Netzwerk Games zu erstellen...


Danke im Voraus

juse4pro

BeitragSo, Jun 07, 2009 16:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm...

du sendest Pakete, soweit so gut, aber was seh ich da: du sendest sie jedes Frame Shocked

Das sollte der Ursprung für die Verzögerung sein, dadurch entsteht ein Datenstau und die neusten Pakete sind immer hintem am Stau und werden später gelesen also hier 2 Vorschläge:

entweder du ließt, falls ein Paket da ist nicht nur eins sondern alle:
Code: [AUSKLAPPEN]

While RecvUDPMsg(und so weiter)


oder du sendest die nicht jedes Frame, sodern nur dann wenn es nötig ist Wink

Hoffe ich konnte helfen Very Happy
Portfolio |LinkedIn |XING
 

onkelz89

BeitragSo, Jun 07, 2009 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal Danke für die schnelle Antwort Smile

Leider hilft mir das noch nicht weiter, das habe ich vorher so gehabt, allerdings haben sich die Autos dann gar nicht bewegt... wahrscheinlich weil zu viel gesendet wird?

juse4pro

BeitragSo, Jun 07, 2009 16:31
Antworten mit Zitat
Benutzer-Profile anzeigen
auf jeden Fall steigt die zeit die das Paket braucht um vom anderen ausgelsen zu werden, auf diese Weise, proportional zur Spieltgesammt zeit an Wink
Portfolio |LinkedIn |XING

Tankbuster

BeitragSo, Jun 07, 2009 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
   recv=RecvUDPMsg(stream);Nachrichten empfangen

   If(recv<>0) ;Wenn eine Nachricht da ist
      while not Eof(stream)
      art=ReadString(stream)
      dd=RSet(art,Len(art)-Instr(art,"#"))
      xx=LSet(art,Instr(art,"/")-1)
      save = LSet(art,Instr(art,"#")-1)
      yy=RSet(save,Len(save)-Instr(save,"/"))
      Wend
   EndIf


Versuchs mal so. Vermutlich ein Datenstau.
Man sollte zuerst immer den ganzen Stream auslesen. Sonst gibts nur Fehler
Twitter
Download Jewel Snake!
Windows|Android
 

onkelz89

BeitragSo, Jun 07, 2009 19:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe leider keinen 2ten PC in näherer Reichweite momentan... aber auf einem PC läuft es damit schon etwas schneller als davor Smile

Danke, falls es immer noch nicht klappen sollte werde ich nochmal was schreiben - hier

Schönen Abend noch

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group