UDP Problem -> Bei Schuss blinkender Player an 0,0
Übersicht

![]() |
The_NiciBetreff: UDP Problem -> Bei Schuss blinkender Player an 0,0 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Guten Tag,
zwecks meiner kleinen UDP-Überei um wieder reinzukommen habe ich ein uraltes Projekt wieder ausgegraben um den UDP-Bug zu beheben. Nun, habe ich geschafft. Einen. Also nicht ganz. Schiesst ein Player, blinkt er auf der anderen Playerseite. Schiesst man selber, sieht man den anderen Player garnicht mehr, also ist er nach 0,0. Codeausschnitt: Code: [AUSKLAPPEN] WriteInt outstrm, p1\x WriteInt outstrm, p1\y WriteInt outstrm, p1\hp WriteInt outstrm, p1\sicht SendUDPMsg outstrm, MasterIP, 7555 empfang=RecvUDPMsg(instrm) If newshot=True Then WriteByte outstrm, 14 SendUDPMsg outstrm, MasterIP, 7555 recv=ReadByte(instrm) If recv=13 Then newshot=False EndIf If empfang <> 0 Then p2\x=ReadInt(instrm) p2\y=ReadInt(instrm) p2\hp=ReadInt(instrm) p2\sicht=ReadInt(instrm) EndIf If ReadByte(instrm)=14 Then a.schuss=New schuss a\x=p2\x a\y=p2\y a\richtung=p2\sicht a\player=1 WriteByte outstrm, 13 SendUDPMsg outstrm, MasterIP, 7555 EndIf Ich denke ich hab das Empfangen irgendwie verkehrt gemacht. Wäre sehr hilfreich wenn sich jemand Zeit nehmen würde und den Code überprüfen würde, wäre ich sehr froh. Danke. ![]() |
||
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sei gegrüßt,
also es sieht so aus als hättest du sehr große Hoffnungen an einen Computer und an das Internet. Ein neuer Schuss wird generiert und das Byte "14" an den anderen gesendet, und sofort wird überprüft was geantwortet wurde o_O. Das heißt es sind von Anfrage senden bis Antwort erwarten ein paar Nanosekunden vergangen. In der Zeit soll das Byte in die Internetleitung kommen, beim anderen wieder raus, verarbeitet werden und dann beantwortet werden... ähm, ja... naja... nicht wirklich. Zudem können UDP Nachrichten, die so kurz hintereinander abgeschickt werden, gerne mal falschrum bei dem anderen ankommen, du müsstest dir also solche Timestamps basteln und sir vor das Byte hängen und dazu noch was das überhaupt für ne Nachricht sein soll, dafür kannst du Zahlen nehmen, oder auch Strings, so dass eine UDP Message folgendermaßen aussehen könnte: Nr. des Pakets zur Sortierung|Was übertragen wird|Daten 243|POSITION|51,321 Statt die Nummer könnte man auch Millisecs mitschicken, das ist willkürlich, allerdings kannst du mit der Nummer auch checken, ob ein Paket nicht angekommen ist (was bei UDP auch vorkommen kann) Auf der anderen Seite musst du einen Parser schreiben der dir die ganze Arbeit abnimmt. Gleichzeitig fällt das Problem weg, dass du im Moment verschiedene Datentypen schickst/ausliest, denn mit Timestamp und so wird das ganze eh zu einem String. Wenn du das gemacht hast und immernoch Probleme hast helf ich gern, soweit ich kann, allerdings hab ich von BlitzBasic auch nicht mehr soooo die Ahnung ![]() |
||
Projekte: Geolaria | aNemy
Webseite: chaosspace.de |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man kann das auch anders machen ...
Code: [AUSKLAPPEN] 1. Auf schuss überprüfen -> Shoot_Variable = 1
2. Prüfen ob neue Nachricht -> x,y usw Position auslesen + Shoot_variable 3. Schicke deine Daten (x,y usw) + deine Shoot_variable 4. Wenn du geschossen hasst dann wieder auf Null setzten (wichtig : Nach Senden schreiben, damit der anedere Spieler auch weiß das du überhabt geschossen hatts (Shoot_Variable = 0) Fertig ^^ So einfach ist das und die Nachricht kommt auch richtig beim anderen an ![]() mfg Crack93 |
||
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! |
![]() |
ChaosCoder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jaaa, aber wenn er nun nicht nur mehr Position und Schuss übertragen will? Es gehört schließlich ein wenig mehr zu einem Netzwerkspiel.
Zum Beispiel das einloggen(wenns server/client mäßig ist) oder aber das gemeinsame verbinden/synchronisieren, und da ist es tausendmal besser wenn man eine ordentliche Struktur hat und alles übersichtlich hält! |
||
Projekte: Geolaria | aNemy
Webseite: chaosspace.de |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Definitiv ...
Die basis jeden Netzwerk Spiels ist ein gescheit aufgebautes Message System und Funktionen die alle "zu sendenden Daten" in pakete umwandeln und verschicken sowie alle seit dem letzten check angekommenen nachrichten überprüft, parst und so die lokalen daten aktualisiert. Das setzt voraus das man sich üeberlegt was man schicken will und das möglichst sinnvoll aufbaut (ChaosCoder hat ja ein beispiel gemacht mit 243|POSITION|51,321 ... in PaketForm wären das 9 Byte, nämlich 1 Byte für die MessageID 243 (-> Position Message) sowie 2x 4 byte für die 2 Ints 51 und 321. was man noch einfügen könnte wäre direkt nach der MessageID die PlayerID. Vorteil dieses Aufbaus: Man kann ein Select nehmen um das erste Byte zu checken und direkt darauf zu reagieren) Dann funktionierts auch mit dem Onlinespass |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke ChaosCoder und Dreamora, werds mir dann mal anschauen! ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group