Hi Patmann2001,
danke für den Tip. Dies habe ich nun eingebaut. Ein TTimer sendet alle 50ms, wenn sich der Char auf der Map X oder Y Koordinate geändert hat folgendes an den Server :
CHROS|30044|400|200|
1. KOMMAND CHAR POSITION FÜR DEN HOST
2. REGISTATRIONSNUMMER EINMALIG
3. POSITION X
4. POSITION Y
Ich erhalte folgende Fehlermeldung ab und zu als Popup:
Access Violation at address 0040430A in module "antalia_host.exe", Write of address 00472EF4.
Ich kann den Timer auch auf 1000 ms einstellen, trotzdem generiert der Host diese sporadisch.
Der Source Code im Client sieht wie folgt aus :
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| procedure TForm1.PositionTimerTimer(Sender: TObject); var WriteText : String; begin IF playerpossendx = player.position.X THEN BEGIN IF playerpossendy = player.position.Y THEN BEGIN EXIT; END ELSE BEGIN //Senden der Position des eigenen Chars if ChatClientSocket.Active then begin WriteText:='CHRPOS'+'|'+Edit3.Text+'|'+IntToStr(mapfilex)+IntToStr(mapfiley)+ '.map'+'|'+IntToStr(player.position.x)+'|'+IntToStr(player.position.y)+'|'+'END'+'|'+#13#10; ChatClientSocket.Socket.SendText(WriteText); Application.Processmessages; playerpossendx:=player.position.x; playerpossendy:=player.position.y; end; END; END;
IF playerpossendy = player.position.y THEN BEGIN IF playerpossendx = player.position.x THEN BEGIN EXIT; END ELSE BEGIN //Senden der Position des eigenen Chars if ChatClientSocket.Active then begin WriteText:='CHRPOS'+'|'+Edit3.Text+'|'+IntToStr(mapfilex)+IntToStr(mapfiley)+ '.map'+'|'+IntToStr(player.position.x)+'|'+IntToStr(player.position.y)+'|'+'END'+'|'+#13#10; ChatClientSocket.Socket.SendText(WriteText); Application.Processmessages; playerpossendx:=player.position.x; playerpossendy:=player.position.y; end; END; END;
end; |
Das Interessant daran ist das der HOST die Fehlermeldung nur generiert, wenn ich beim Client die Cursortaste egal welche z.b. links für 10-15 sek. gedrückt halte. Dann kommt der Host mit der Verarbeitung anscheind nicht klar... Vielleicht kannst Du mir oder jeamand anders weiterhelfen.
Bisher bin ich mit dieser Art der Kommunikation zwischen Client und HOST nicht zufrieden, bzw. ich programmiere es anscheind nicht richtig.