3D-Udp Problem[Gelöst]
Übersicht

![]() |
BlacksideBetreff: 3D-Udp Problem[Gelöst] |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
Ich bin gerade dabei mich etwas wieder mit Netzwerk-Programmierung einzuarbeiten, leider habe ich nach einen Crash meines Computers, meine ganzen alten Netzcodes verloren.... Ich wollte eine simple 3D positionsübertragung der x,y,z koordinaten über udp programmieren, doch leider scheint etwas nicht zu klappen, denn die bewegungen werden erst mit etwa 10 sekunden verspätung übertragen wenn ich es 2 mal auf meinen rechner starten, übers internet, seh ich jedoch garnichts bewegen.... Die Spieler-Koordinaten, werden alle an den Server gesand, und dieser verteilt sie an alle anderen Spieler: Client: Code: [AUSKLAPPEN] Graphics3D 800,600,32,2
SeedRnd MilliSecs() SetBuffer BackBuffer() HidePointer Local timer = CreateTimer(80) Local send_milli#,read_milli# Local readsvr,readav,rbyte Local svr = CreateUDPStream(Rnd(100,8000)) If svr <> 0 Then Print "Server Created..." Else RuntimeError "there was an error creating the server..." End If ;Ip Local Ip% = INT_IP(Input("IP: ")) ;Send Connect WriteByte svr,1 SendUDPMsg svr,Ip,8767 ;Player/Cam player = CreateCube() cam = CreateCamera(player) MoveEntity cam,0,5,-5 RotateEntity cam,30,0,0 ScaleEntity player,.2,.2,.2 EntityType player,1 EntityRadius player,.33,.33 ;light light = CreateLight() ;Loadworld map = LoadMesh("maps\map0.b3d") Global brick = LoadTexture("gfx\brick.bmp") ScaleEntity map,2,1.5,2 PositionEntity map,0,-1,0 EntityTexture map,brick EntityType map,2 Collisions 1,2,2,2 Local ey# = EntityY(player),yv# ;HS While Not KeyDown(1) WaitTimer timer ;gravity yv# = EntityY(player)-ey# ey# = EntityY(player) ;Bewegung If KeyDown(17) Then MoveEntity player,0,0,.08 If KeyDown(31) Then MoveEntity player,0,0,-.05 If KeyDown(30) Then MoveEntity player,-.05,0,0 If KeyDown(32) Then MoveEntity player,.05,0,0 If KeyDown(57) And yv# = 0 Then yv# = .15 RotateEntity cam,EntityPitch(cam)+MouseYSpeed()/2,0,0 RotateEntity player,0,EntityYaw(player)-MouseXSpeed()/2,0 ;MoveMouse 512,384 ;gravity TranslateEntity player,0,yv#-.005,0 ;!Network ;read If read_milli < MilliSecs() Then readsvr = RecvUDPMsg(svr) If readsvr <> 0 Then readav = ReadAvail(svr) If readav <> 0 Then rbyte = ReadByte(svr) Select rbyte Case 1 ;con p.Player = New Player p\ip = ReadInt(svr) p\port = ReadInt(svr) p\model = CreateCube() ScaleEntity p\model,.2,.2,.2 Case 2 ;dis rIp = ReadInt(svr) port = ReadInt(svr) For p.Player = Each Player If p\ip = rIp And p\port = port Then FreeEntity p\model Delete p End If Next Case 3 rIp = ReadInt(svr) port = ReadInt(svr) For p.Player = Each Player If p\ip = rIp And p\port = port Then p\x# = ReadFloat(svr) p\y# = ReadFloat(svr) p\z# = ReadFloat(svr) End If Next End Select End If End If read_milli = MilliSecs()+32 End If For p.Player = Each Player PositionEntity p\model,p\x#,p\y#,p\z# Next ;Send If send_milli < MilliSecs() Then WriteByte svr,3 WriteFloat svr,EntityX(player) WriteFloat svr,EntityY(player) WriteFloat svr,EntityZ(player) SendUDPMsg svr,Ip,8767 send_milli = MilliSecs()+32 End If RenderWorld UpdateWorld Flip 0 Wend WriteByte svr,3 SendUDPMsg svr,Ip,8767 CloseUDPStream svr Type Player Field x#,y#,z# Field ip,port% Field model Field id% End Type 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 Server: Code: [AUSKLAPPEN] Local svr = CreateUDPStream(8767)
Local send_milli#,read_milli# Local readsvr,readav,rbyte Local plycount,maxply Local timer = CreateTimer(80) If svr <> 0 Then Print "Server Created..." Else RuntimeError "there was an error creating the server..." End If While Not KeyDown(1) WaitTimer timer ;read If read_milli < MilliSecs() Then readsvr = RecvUDPMsg(svr) If readsvr <> 0 Then readav = ReadAvail(svr) If readav <> 0 Then port = UDPMsgPort(svr) ip = UDPMsgIP(svr) rbyte = ReadByte(svr) Select rbyte Case 1 For p.Player = Each Player WriteByte svr,1 WriteInt svr,ip WriteInt svr,port SendUDPMsg svr,p\ip,p\port WriteByte svr,1 WriteInt svr,p\ip WriteInt svr,p\port SendUDPMsg svr,ip,port Next p.Player = New Player p\ip$ = ip p\port = port Print "Player Connected...." Case 2 For p.Player = Each Player If ip = p\ip And port = p\port Then Delete p End If Next For p.Player = Each Player WriteByte svr,2 WriteInt svr,ip WriteInt svr,port SendUDPMsg svr,p\ip,p\port Next Print "Player Disconnected..." Case 3 For p.Player = Each Player If p\port = port And p\ip = ip Then p\x = ReadFloat(svr) p\y = ReadFloat(svr) p\z = ReadFloat(svr) End If Next End Select End If End If read_milli = MilliSecs()+32 End If ;sende an alle If send_milli < MilliSecs() Then For s.Player = Each Player For p.Player = Each Player If p\port <> s\port Then WriteByte svr,3 WriteInt svr,s\ip WriteInt svr,s\port WriteFloat svr,s\x WriteFloat svr,s\y WriteFloat svr,s\z SendUDPMsg svr,p\ip,p\port End If Next Next send_milli = MilliSecs()+32 End If Wend CloseUDPStream svr Type Player Field x#,y#,z# Field ip,port% End Type 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 Sorry wenn der Code evt. etwas unübersichtlich ist, habe schon viel dran rumprobiert, um das Problem zu lösen =( EDIT: Ich hab das Problem gefunden, ich musste nur die "Zeitbegrenzung" beim lesen rausnehmen... ![]() |
||
Hier sollte eigentlich eine Signatur stehen! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group