Logikproblem .... joa^^

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

 

Myn

BeitragFr, Feb 18, 2011 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Habs hinbekommen, wenn auch etwas anders...


Mein neues Problem:

1) Die Übertragung dauert ca. 20sec, geht das auch schneller ? (UDP)

2) Bei meinem Chat Ingame kommt nur ca. 1 von 10 Narchichten beim anderen an?
Liegt das an UDP, weil da manchmal was fehlen kann oder ist das ehr unwahrscheinlich und liegt
bei mir am Code?

Habe es nach diesem Vorbild gemacht:
https://www.blitzforum.de/foru...hp?t=36493
(Das Beispiel von Pummelie)


Wäre super wenn ihr mir das noch beantworten könntet ;D

mfg
Myn

ToeB

BeitragSa, Feb 19, 2011 0:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, UDP überprüft nicht ob die Daten ankommen..

Am besten du guckst dir einfach mal meine SimpleUDP2 (Signatur) an, da wird ein Senden zur verfügung gestellt welches 100% sicher geht das die Nachrichten ankommen !

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

Myn

BeitragSa, Feb 19, 2011 1:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist es normal das UDP ca. 20sec. braucht für die Übertragung/Empfangen ...?
Bei braucht eine Message 20sec.... das ist eigentlich viel zu lange für mein Spiel...?

ToeB

BeitragSa, Feb 19, 2011 1:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Es liegt nicht an UDP, es liegt an deinem Code.

UDP ist das schnellste IProtokoll was es gibt, weil es Verbindungslos ist und nicht prüft ob die Nachrichten, die versendet wurden, auch wirklich ankommen.

Ohne code können wir hier wirklich nicht viel sagen !


mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

Myn

BeitragSa, Feb 19, 2011 12:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe euch doch das Beispiel von Pummelie verlinkt....?
So habe ich es gemacht.. : (Das ist das Beispiel:)

Code: [AUSKLAPPEN]
Function WriteX(udp,ip,x)
  WriteByte(udp,1) ; byte 1 heißt obsofort, ein int (x) wert folgt)
  WriteInt(udp,x)
  SendUDPMsg(udp,ip)
End Function
Function WriteY(udp,ip,y)
  WriteByte(udp,2) ; byte 2 heißt obsofort, ein int (y) wert folgt)
  WriteInt(udp,y)
  SendUDPMsg(udp,ip)
End Function



Code: [AUSKLAPPEN]

If RecvUDPMsg(udp)<>0 Then
  Select ReadByte(udp) ;das byte auslesen, und je n nach Inhalt empfangen...
    Case 1
      playerX=ReadInt(udp)
    Case 2
      playerY=ReadInt(udp)
  End Select
EndIf



Das ist das Beispiel und so hab ich es auch gemacht... ausgeführt wird der Code schnell genug^^


//EDIT
Hab noch eine Frage:

Ich habe es so gemacht das die Client den UDP Stream erstellt und den Port dann frei wählt.
Aber um Daten zu empfangen muss der Port freigeschaltet sein, geht das auch ohne das
man einen Port freischaltet, weil ja nicht jeder einen freigeschalteten Port hat....?



//EDIT gelöst
 

primero

BeitragMo, Feb 21, 2011 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Es könnte daran liegen dass du zu häufig etwas sendest. Wenn du in jeder Schleife alle Daten überträgst, kann das zum überlasten des Netzwerkes führen.

zumindest hatte ich das Prob mal ^^

ToeB

BeitragMo, Feb 21, 2011 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein es liegt daran, das er RecvUDPMsg durch die IF-Anweisung nur einmal pro Schleife ausführt und somit (mit FPS-Begrenzung) nur alle 16ms eine Nachricht auslesen kann, das führt dann zu nem kleinen Datenstau. Was ich ihm schon gesagt habe und für anderen nochmal sagen werde : Nehmt eine Whileschleife. Damit können alle Aktuellen Nachrichten direkt abgefragt werden : (Alles in der Haupt-Schleife)
Code: [AUSKLAPPEN]
If RecvUDPMsg( Stream ) Then
...
EndIF

So kommt es zu einem Datenstau, so nicht :
Code: [AUSKLAPPEN]
While RecvUDPMsg( Stream )
...
Wend

Hier kommt auch der Vorteil der While-Schleife im Gegensatz zur Repeat schleife hervor : Es wird am anfang geprüft ob die Schleife überhaupt angefangen werden muss, und das muss sie ja nicht, wenn keine Nachrichten da sind...

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group