Moin!
MarkusD hat folgendes geschrieben: |
Außerdem möchte ich nur ein Prinzip wissen, wie man sowas ruckelfrei realisieren kann.
In Onlinegames ruckelt man ja auch nicht rum, obwohl das ganze noch über nen Server geht |
Das ist einer der schwierigsten Teile einer solchen Anwendung!

Du brauchst dich also nicht zu wundern, wenn du das nicht auf anhieb hinkriegst.

Gerade die hohe Latenzzeit über Internetverbindungen ist die krasseste Hürde, die alle (auch Profi-Online-Games) haben!

Aber dafür gibt es leider keine "Patentlösung"...
MarkusD hat folgendes geschrieben: |
| bir mir ist es P2P. |
Du machst P2P mit TCP?

Hmm, evtl. kannst du dann mit UDP doch noch was herausholen.
MarkusD hat folgendes geschrieben: |
| Das ganze läuft mit TServer/ClientSockets, und ja ich weiß das die nicht die besten/schnellsten sind. Aber mit anderen Sockets dürfte das auch nicht besser sein. |
So ist es, das sehe ich genau so. Es stecken letztlich auch nur die WSA-Sockets dahinter, egal welcher Wrapper das kapselt. Und an der Performance des Serverprozesses liegt es ja nicht, wie du schon korrekt erkannt hast, sondern an den teilweise hohen Verzögerungen über die Internetverbindung. Allerdings spielt es hier noch mal eine Rolle, ob TCP oder UDP

wäre einen Versuch wert.
Du kannst das Problem nie wirklich beseitigen, sondern nur mit sehr viel Aufwand "tarnen".

Das ganze läuft hauptsächlich über eine geschickte Planung des Ereignissystems im Spiel. Schau dir z.B. mal Diablo 2 an, da finde ich, ist das schön zu sehen, wenn man zwei Rechner nebeneinander stellt, die beide über eine Internetverbindung mit einem Server verbunden sind. Wenn man da mit der einen Figur irgendwo hinläuft, wird zunächst die "Absicht" (=lauf da hin) gesendet und dann, sozusagen, wenn "Zeit ist", die aktuellen Koordinaten abgeglichen. Letztlich wird aber immer soviel wie möglich an Berechnung den Clients überlassen und dann die Ergebnisse abgeglichen. Das führt dann zwar leider immer noch manchmal zum "Springen/Teleportieren", aber die Qualität ergibt sich dann aus der Häufigkeit, mit der das passiert.
cu
Narses
//EDIT: Vielleicht kann man das Fazit so fassen: die "Kunst" besteht darin, dass es nicht wirklich "gleichzeitig" sein muss, sondern dass es jeder Client für sich gesehen für gleichzeitig hält

IdR hat man an seinem Client ja keine Vergleichsmöglichkeit, so dass es "ausreicht", wenn die Aktionen einigermaßen folgerichtig Ablaufen. Beispiel aus D2: wenn du eine Schatzkiste anklickst, dann wird sofort ein Reservierungsanfragepaket an den Server gesendet, der dieses beantwortet (ja, du hast die Kiste als Erster angeklickt oder eben nicht), danach erst generiert der Server den Inhalt und sendet ihn an die anderen Clients. Hat jemand kurz nach dir (aber noch vor dem "Auspacken") auch auf die Kiste geklickt, dann kann er diese nicht mehr reservieren und der Client passend darauf reagieren, als ob die Kiste schon offen wäre. Kurz darauf purzelt dann der Inhalt raus, aber das merkst du kaum noch.

Das ganze kombiniert mit etwas Finetuning in Form von Nachrichtenprioritäten (kurze Statusinfos sind wichtiger und werden sofort weitergeleitet, größere Detaildatenpakete werden "wenn Zeit ist" gesendet), und schon wirkt ein Spiel "flüssiger".

Jetzt muss man das nur noch eben umsetzen...

There are 10 types of people - those who understand binary and those who don´t.