Hey Leute.
Ich habe eine Frage, es geht in die Richtung Netzwerkspieleprogrammierung.
Ich wollte mal wieder mit dem Thema anfangen, nur diesmal alles mit gelerntem
in Opengl verwenden. Also ein Netzwerkspiel welches mit Opengl gerendered wird.
Den Rendervorgang sehe ich als nicht notwendig zu beschränken. Das heißt ich lass
eine Grafikanwendung meist mit so viel FPS laufen wie die Grafikkarte eben schafft.
Das bedeutet bei mir bei einem einzigen gezeichneten Kästchen auf dem Bildschirm
an die 10-14000 fps.
Mein Server Client system sieht grob so aus:
Server: Speichert Spieler-Verbindungen, (akzeptierte Sockets), hat für jede
Verbindung eine read() (returned einen String wenn reader.ready()) und eine write(String command) methode.
Hat die Aufgabe zum Beispiel beim Spielstart den Clients “newgame:parameter” zu schicken, und bei annahme
von zB player positionen oder anderen daten die alle clients brauchen diese an letztere weiterzuschicken.
Client: Hat erbenfalls eine read und eine write methode. Schickt seine daten an den Server, der arbeitet damit weiter.
Empfängt zum Beispiel gegenerpositionen und macht diese auch sichtbar.
So. Wenn ich jetzt hingehe und 14000 mal meine Position an den Server schicke… Naja… Ich habs gestern tatsächlich
gemacht, nach n paar sekunden stürzt das Programm einfach ab. Ist natürlich sinnfrei. Besser wäre es in Regelmäßigen
Intervallen Pakete an den Server zu versenden. Und hier stellt sich meine Frage: In welchen? Sollte dieser Intervall fixed sein,
und einfach durch eine art counter repsäntiert werden? Vielleicht sogar in der Game Loop? Oder sollte die Kommunikation in einem
anderen Thread laufen? Wie macht man das am besten?
if(ticksInSeconds % 50 == 0) sendInformatinoToServer();
so etwa? Das wären dann ja 20 Pakete in der Sekunde, ist das optimal? Oder kompletter Quatsch?
Ich finde im Netz irgendwie nicht wirklich was dazu. Als konkrete Codebeispiele oder sowas… bin
vielleicht zu blöd zum googeln…
Naja, danke fürs lesen
*** Edit ***
Vor allem was passiert, wenn jemand nen 150.er Ping hat? dann bekommt der meine Infos ja maximal 6.6 periode mal in der Sekunde, und nicht 20?
Dann sieht der alles verzögert oder wie?..