[UDP] Mein Freund wird nicht synchronisierd!

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

DJ_Mic

Betreff: [UDP] Mein Freund wird nicht synchronisierd!

BeitragMo, Sep 13, 2010 22:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ich habe ein Problem... Und zwar verstehe ich nicht warum bei mir aufm Rechner wenn ich
Server offen habe und mit Client1 + Client2 connecte, sich die cubes langsam bewegen.

Aber sobald mein Freund von aussen connected (mein Port ist offen) dann seh ich ihn ingame aber er bewegt sich nicht! Also iwo habe ich einen Fehler...

Kann mir bitte jemand sagen, wo?

Client:
BlitzBasic: [AUSKLAPPEN]
AppTitle "Client"
Graphics3D 640,480,32,2
SeedRnd MilliSecs()

Global f_Time=CreateTimer(111)
Global n_Stream=CreateUDPStream(Rand(5999,9111))
Global n_Port=UDPStreamPort(n_Stream)
Global s_Ip$=HostIP(CountHostIPs("84.162.188.210")); // Oder die I-Net Ip auf diese der Client Connect soll.
Global s_Port=8979

Const n_Connect=1
Const n_Leave=2
Const n_Position=3

Type n_User
Field U_Name$
Field U_Port
Field u_Entity%
Field u_X#
Field u_Z#
Field u_A#
End Type

Type n_Chat
Field C_Msg
End Type

n_Name$=Input("Username : ")
WriteByte n_Stream,n_Connect
WriteLine n_Stream,n_Name$
SendUDPMsg n_Stream,s_Ip$,s_Port

cPiv=CreatePivot()
Cube=CreateCube(cPiv)
PositionEntity Cube,0,1,0
EntityColor Cube,Rand(20,255),Rand(20,255),Rand(20,255)
Camera=CreateCamera(Cube)
PositionEntity Camera,0,5,-6
RotateEntity Camera,30,0,0

FcB_Red=Rand(0,255)
FcB_Green=Rand(0,255)
FcB_Blue=Rand(0,255)

CameraClsColor Camera,FcB_Red,FcB_Green,FcB_Blue
CameraFogMode Camera,1
CameraFogColor Camera,FcB_Red,FcB_Green,FcB_Blue
CameraFogRange Camera,0.1,100

Plane=CreatePlane()
Gitter=LoadTexture("rasen.bmp",2)
EntityTexture Plane,Gitter
EntityFX Plane,1

While Not KeyHit(1)
WaitTimer(f_Time)
Cls
If RecvUDPMsg(n_Stream)
n_Type=ReadByte(n_Stream)
Select n_Type
Case n_Connect
nU.n_User=New n_User
nU\u_Name$=ReadLine(n_Stream)
nU\u_Port=ReadByte(n_Stream)
nU\u_Entity%=CreateCube()
PositionEntity nU\u_Entity%,0,1,0
EntityColor nU\u_Entity%,Rand(0,255),Rand(0,255),Rand(0,255)
Case n_Leave
For nU.n_User=Each n_User
If nU\u_Port=ReadByte(n_Stream)
FreeEntity nU\u_Entity%
Delete nU
EndIf
Next
Case n_Position
For nU.n_User=Each n_User
If nU\u_Port=ReadByte(n_Stream)
nU\u_X#=ReadFloat(n_Stream)
nU\u_Z#=ReadFloat(n_Stream)
nU\u_A#=ReadFloat(n_Stream)
EndIf
Next
End Select
EndIf
If KeyDown(200) Then MoveEntity cPiv,0,0,.2
If KeyDown(208) Then MoveEntity cPiv,0,0,-.2
If KeyDown(203) Then TurnEntity cPiv,0,1.8,0
If KeyDown(205) Then TurnEntity cPiv,0,-1.8,0
If MilliSecs( )-s_Time>10
WriteByte n_Stream,n_Position
WriteFloat n_Stream,EntityX#(cPiv)
WriteFloat n_Stream,EntityZ#(cPiv)
WriteFloat n_Stream,EntityYaw#(cPiv)
SendUDPMsg n_Stream,s_Ip$,s_Port
s_Time=MilliSecs()+126
EndIf

For nU.n_User=Each n_User
If EntityInView(nU\u_Entity%,Camera)
CameraProject(Camera,nU\u_X#,0,nU\u_Z#)
PositionEntity nU\u_Entity%,nU\u_X#,1,nU\u_Z#
RotateEntity nU\u_Entity%,0,nU\u_A#,0
EndIf
Next
RenderWorld()
UpdateWorld()
For nU.n_User=Each n_User
If EntityInView(nU\u_Entity%,Camera)
CameraProject(Camera,nU\u_X#,0,nU\u_Z#)
Color 255,255,255
Rect ProjectedX#()-10,ProjectedY#()-40,80,14,1
Color 0,0,0
Text ProjectedX#()-10,ProjectedY#()-40,nU\u_Name$
EndIf
Next
Flip 0
Wend

WriteByte n_Stream,n_Leave
SendUDPMsg n_Stream,s_Ip$,s_Port


Server:
BlitzBasic: [AUSKLAPPEN]
AppTitle "Server"
Graphics 240,60,16,2
SeedRnd MilliSecs()

Global f_Time=CreateTimer(100)
Global n_Stream=CreateUDPStream(8979); //Wenn nicht auf Localhost getestet wird dann diesen Port-UDP oeffnen.

Const n_Connect=1
Const n_Leave=2
Const n_Position=3

Type n_User
Field u_Name$
Field u_Ip$
Field u_Port
Field u_X#
Field u_Z#
Field u_A#
End Type

Type n_Chat
Field C_Msg
End Type

While Not KeyHit(1)
WaitTimer(f_Time)
If RecvUDPMsg(n_Stream)
n_Ip$=UDPMsgIP(n_Stream)
n_Port=UDPMsgPort(n_Stream)
n_Type=ReadByte(n_Stream)
Select n_Type
Case n_Connect
nU.n_User=New n_User
u_Name$=ReadLine(n_Stream)
nU\u_Name$=u_Name$
nU\u_Ip$=n_Ip$
nU\u_Port=n_Port
For nU.n_User=Each n_User
If Not nU\u_Port=n_Port
WriteByte n_Stream,n_Connect
WriteLine n_Stream,u_Name$
WriteByte n_Stream,n_Port
SendUDPMsg n_Stream,nU\u_Ip$,nU\u_Port
EndIf
Next
For nU.n_User=Each n_User
If Not nU\u_Port=n_Port
WriteByte n_Stream,n_Connect
WriteLine n_Stream,nU\u_Name$
WriteByte n_Stream,nU\u_Port
SendUDPMsg n_Stream,n_Ip$,n_Port
EndIf
Next
DebugLog "Server: Connect -> "+u_Name$
Print "Server: Connect -> "+u_Name$
Case n_Leave
For nU.n_User=Each n_User
If Not nU\u_Port=n_Port
WriteByte n_Stream,n_Leave
WriteByte n_Stream,n_Port
SendUDPMsg n_Stream,nU\u_Ip$,nU\u_Port
Else
DebugLog "Server: "+nU\u_Name$+" -> Leave"
Print "Server: "+nU\u_Name$+" -> Leave"
Delete nU
EndIf
Next
Case n_Position
For nU.n_User=Each n_User
If nU\u_Port=n_Port
nU\u_X#=ReadFloat(n_Stream)
nU\u_Z#=ReadFloat(n_Stream)
nU\u_A#=ReadFloat(n_Stream)
Print "Server: "+nU\u_Name$+" -> Update"
EndIf
Next
End Select
EndIf
If MilliSecs()-s_Time>10
For nU.n_User=Each n_User
For nUn.n_User=Each n_User
If nUn\u_Port<>nU\u_Port
WriteByte n_Stream,n_Position
WriteByte n_Stream,nU\u_Port
WriteFloat n_Stream,nU\u_X#
WriteFloat n_Stream,nU\u_Z#
WriteFloat n_Stream,nU\u_A#
SendUDPMsg n_Stream,nU\u_Ip$,nUn\u_Port
End If
Next
Next
s_Time=MilliSecs()
End If
Flip 0
Wend


Vielen Dank im vorraus!

Grüßle
Dennis

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group