Positionsübertragung per LAN
Übersicht

![]() |
count-dokuBetreff: Positionsübertragung per LAN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich habe ein kleines LAN-Spiel geschrieben: Code: [AUSKLAPPEN] Graphics 800, 600
SetBuffer BackBuffer() Inp_Port = 4000 Out_Port = 4001 ip_count = CountHostIPs(GetEnv("localhost")) Repeat Text 0, 0, "UDP Game" Text 0, 10, "LOCAL IP:" For i = 1 To ip_count Text 0, 20, DottedIP(HostIP(1)) Next Text 0, 30, "Enter Opponent´s IP#: xxx.xxx.xxx.xxx" Dest_IP$ = NewInput$(Dest_IP$) Text 0, 40, ">" + Dest_IP$ + "|" Flip Cls Until KeyDown(28) IP = INT_IP(Dest_IP$) udp_rd = CreateUDPStream(Inp_Port) udp_wr = CreateUDPStream(Out_Port) FlushKeys() mred=0 mgreen=0 mblue=255 ored=255 ogreen=0 oblue=0 Repeat Text 0,0,"Waiting for opponent..." WriteByte(udp_wr, 123) SendUDPMsg udp_wr, IP, Inp_Port IP_rd = RecvUDPMsg(udp_rd) byte1 = ReadByte(udp_rd) Flip Cls Until byte1=123 Cls:Flip Cls:Flip mex=30 mey=50 Repeat Text 0,0,"Connected..." Text 0,15,"Blue Point > You" Text 0,30,"Red Point > Opponent" If KeyDown(200) Then mey=mey-1 If KeyDown(208) Then mey=mey+1 If KeyDown(203) Then mex=mex-1 If KeyDown(205) Then mex=mex+1 IP_rd = RecvUDPMsg(udp_rd) otx = ReadFloat(udp_rd) IP_rd = RecvUDPMsg(udp_rd) oty = ReadFloat(udp_rd) WriteFloat(udp_wr, mex) SendUDPMsg udp_wr, IP, Inp_Port WriteFloat(udp_wr, mey) SendUDPMsg udp_wr, IP, Inp_Port Color ored,ogreen,oblue Oval otx,oty,4,4,1 Color mred,mgreen,mblue Oval mex,mey,4,4,1 Color 255,255,255 Flip Cls Until KeyDown(1) CloseUDPStream udp_wr CloseUDPStream udp_rd End Function INT_IP(IP$) a1 = Int(Left(IP$, Instr(IP$, ".") - 1)) : IP$ = Right(IP$, Len(IP$) - Instr(IP$, ".")) a2 = Int(Left(IP$, Instr(IP$, ".") - 1)) : IP$ = Right(IP$, Len(IP$) - Instr(IP$, ".")) a3 = Int(Left(IP$, Instr(IP$, ".") - 1)) : IP$ = Right(IP$, Len(IP$) - Instr(IP$, ".")) a4 = Int(IP$) Return (a1 Shl 24) + (a2 Shl 16) + (a3 Shl 8 ) + a4 End Function Function NewInput$(currentText$) localChar = GetKey() If (localChar > 0) And (localChar <> 8 ) Then currentText$ = currentText$ + Chr$(localChar) ElseIf localChar = 8 Then length = Len(currentText) If length > 0 Then currentText = Left(currentText, length - 1) EndIf EndIf Return currentText$ End Function Komischerweise springt der Punkt manchmal einfach so hin und her. Und startet verzögert. Woran kann das liegen? count-doku |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ersetzt mal:
Code: [AUSKLAPPEN] IP_rd = RecvUDPMsg(udp_rd) otx = ReadFloat(udp_rd) IP_rd = RecvUDPMsg(udp_rd) oty = ReadFloat(udp_rd) durch: Code: [AUSKLAPPEN] IP_rd = RecvUDPMsg(udp_rd)
If IP_rd Then otx = ReadFloat(udp_rd) oty = ReadFloat(udp_rd) Endif Sonst könnte es sein, dass in einem Schleifendurchlauf keine Variable empfangen wird, und deshalb otx oder oty nicht den richtigen Wert hat. EDIT: Ich möchte noch anmerken, dass das nicht gerade sauber programmiert ist. Pro Schleifendurchlauf wird der Stream nur einmal ausgelesen. Dabei könnte es sein, dass viel mehr Nachrichten empfangen werden, als ausgelesen werden können. Das heißt, dass dein Programm unweigerlich zu einem Datenstau füren wird, wenn Beide Programme nicht über die exakten FPS verfügen ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke! ![]() Es funktioniert sehr gut. Ich habe es jetzt so: Code: [AUSKLAPPEN] IP_rd = RecvUDPMsg(udp_rd) If IP_rd otx = ReadFloat(udp_rd) oty = ReadFloat(udp_rd) EndIf WriteFloat(udp_wr, mex) WriteFloat(udp_wr, mey) SendUDPMsg udp_wr, IP, Inp_Port count-doku |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group