Ja, das war ein Spaß, als Blizzard mal "aus Versehen" in einem Patch von World of Warcraft die Interpolation abgestellt hatte und alles nur noch wie wild durch die Gegend zuckte
Im Prinzip kann man schon alle Positionswerte übertragen, weil sich sowieso die Richtung etc. sehr schnell ändert. Wenn du das alles überträgst, kann der Client selbst versuchen, die zukünftige Position eines Spielers vorherzusehen und die Animation in die entsprechende Richtung einzuleiten. Das macht sich manchmal dadurch bemerkbar, dass bei schlechten Latenzen jemand erst in eine bestimmte Richtung rennt, dann aber in einer anderen Richtung "geportet" wird. Auch musst du einen Kompromiss finden zwischen "der Server hat immer recht" und "der Client weiß selbst am besten, wie er sich wann wohin bewegt", denn zuweit in die eine Richtung, und der Spieler verliert die Kontrolle über sich selbst, zuweit in die andere Richtung, und man kann prima cheaten (indem man die eigene Position/Richtung vor dem Senden modifiziert).
Wenn es dir speziell um die Frage mit der Mainloop geht:
Kommt ein wenig auf die Framerate an. Mehr als etwa 30 Aktualisierungen pro Sekunde sind eigentlich im Normalfall unnötig. Außerdem kannst du nicht in der Mainloop auf die Information warten (stell dir vor, du hast 100ms Latenz, dann wäre deine Mainloop aber langsam
). Du musst sie also entweder in einem zweiten Thread abfragen oder halt mehr oder weniger asynchron übertragen (also in einem Frame anfordern und eben das nächste mal, wenn Positionen reinkommen, diese verarbeiten).
Du kannst ja auch mal in den Quellcode von Quake2 reinschauen, da gibt es sogar einen Delphi-Port von