Networkverbindung Programmierungsfehler?
Verfasst: 12.01.2008 23:15
Hi,
ich probiere mich gerade am Network, und ich glaube, ich habs schon so ziemlich draußen.
ABER:
Dieses kleine "Spiel" (was eig. erst ein Spiel werden soll) hat denke ich einen schwerwiegenden Fehler, der das ganze um so einiges Verzögert.
Hier mal der Code:
Server:
Client:
Wenn man jetzt beides öffnet, also Server und Client, und den Client nachher mithilfe der Pfeiltasten bewegt, dann ist das (also die Bewegung des Clienten) auf den Serverbildschirm um einiges Verzögert.
Was mache ich falsch, bzw. wie mache ich es richtig?
lg Milchshake
ich probiere mich gerade am Network, und ich glaube, ich habs schon so ziemlich draußen.
ABER:
Dieses kleine "Spiel" (was eig. erst ein Spiel werden soll) hat denke ich einen schwerwiegenden Fehler, der das ganze um so einiges Verzögert.
Hier mal der Code:
Server:
Code: Alles auswählen
If InitNetwork() = 0
MessageRequester("Fehler","Konnte das Network nicht starten")
End
EndIf
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester("Fehler", "Konnte DirectX 7 nicht starten", 0)
End
EndIf
If OpenWindow(0,0,0,410,310,"The little Spider Game-Server",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
If OpenWindowedScreen(WindowID(0),5,5,320,300,0,0,0)
CreateSprite(0,20,20)
StartDrawing(SpriteOutput(0))
Box(0,0,20,20,#White)
StopDrawing()
CreateSprite(1,20,20)
StartDrawing(SpriteOutput(1))
Box(0,0,20,20,#Green)
StopDrawing()
EndIf
Else
MessageRequester("Fehler", "Konnte den Screen nicht öffnen", 0)
End
EndIf
direction = 1
playerX = 150
playerY = 280
Buffer2 = AllocateMemory(1000)
CreateNetworkServer(0,6666)
Buffer = AllocateMemory(1000)
Repeat
Event.l = WindowEvent()
If Event = #PB_Event_Gadget
; do the normal application stuff here...
Gadget = EventGadget()
Else
; do the sprite & screen stuff here...
FlipBuffers() ; Inverse the buffers (the back become the front (visible)... and we can do the rendering on the back
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Up) And playerY > 0 : playerY -3 : EndIf
If KeyboardPushed(#PB_Key_Down) And playerY < 280 : playerY +3 : EndIf
If KeyboardPushed(#PB_Key_Left) And playerX > 0 : playerX -3 : EndIf
If KeyboardPushed(#PB_Key_Right) And playerX < 300 : playerX +3 : EndIf
; Clear the screen and draw our sprites
ClearScreen(RGB(0,0,0))
DisplaySprite(0, playerX, playerY)
If Start = 1
DisplaySprite(1,sentx,senty)
EndIf
Client = EventClient()
Server = NetworkServerEvent()
Select Server
Case 1
Start = 1
Case 2
If State = 0
ReceiveNetworkData(EventClient(),Buffer,1000)
sentx = PeekQ(Buffer)
State = 1
EndIf
If State = 1
ReceiveNetworkData(EventClient(),Buffer,1000)
senty = PeekQ(Buffer)
State = 0
EndIf
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
End
Code: Alles auswählen
If InitNetwork() = 0
MessageRequester("Fehler","Konnte das Network nicht starten")
End
EndIf
If InitSprite() = 0 Or InitKeyboard() = 0
MessageRequester("Fehler", "Konnte DirectX 7 nicht starten", 0)
End
EndIf
If OpenWindow(0,0,0,410,310,"The little Spider Game-Client",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
If OpenWindowedScreen(WindowID(0),5,5,320,300,0,0,0)
CreateSprite(0,20,20)
StartDrawing(SpriteOutput(0))
Box(0,0,20,20,#White)
StopDrawing()
CreateSprite(1,20,20)
StartDrawing(SpriteOutput(1))
Box(0,0,20,20,#Green)
StopDrawing()
EndIf
Else
MessageRequester("Fehler", "Konnte den Screen nicht öffnen", 0)
End
EndIf
Buffer2 = AllocateMemory(1000)
direction = 1
playerX = 150
playerY = 280
Server = OpenNetworkConnection("127.0.0.1",6666)
Buffer = AllocateMemory(1000)
Repeat
Event.l = WindowEvent()
If Event = #PB_Event_Gadget
; do the normal application stuff here...
Gadget = EventGadget()
Else
; do the sprite & screen stuff here...
FlipBuffers() ; Inverse the buffers (the back become the front (visible)... and we can do the rendering on the back
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Up) And playerY > 0 : playerY -3 : EndIf
If KeyboardPushed(#PB_Key_Down) And playerY < 280 : playerY +3 : EndIf
If KeyboardPushed(#PB_Key_Left) And playerX > 0 : playerX -3 : EndIf
If KeyboardPushed(#PB_Key_Right) And playerX < 300 : playerX +3 : EndIf
; Clear the screen and draw our sprites
ClearScreen(RGB(0,0,0))
DisplaySprite(0, playerX, playerY)
PokeQ(Buffer2,PlayerX)
SendNetworkData(Server,Buffer2,1000)
PokeQ(Buffer2,PlayerY)
SendNetworkData(Server,Buffer2,1000)
ServerEvent = NetworkClientEvent(Server)
Select ServerEvent
Case 0
State = 0
Case 2
If State = 1
ReceiveNetworkData(Server,Buffer,1000)
sentx = PeekQ(Buffer)
State = 2
EndIf
If State = 2
ReceiveNetworkData(Server,Buffer,1000)
senty = PeekQ(BUffer)
State = 1
EndIf
EndSelect
EndIf
Until Event = #PB_Event_CloseWindow Or KeyboardPushed(#PB_Key_Escape)
End
Was mache ich falsch, bzw. wie mache ich es richtig?
lg Milchshake