Netzwerkcode für Spiele
-
Ich bin grad dabei ein supertolles Spiel (in C#) zu programmieren. Ok, supertoll ist es noch nicht und wird es wohl nie werden, aber jeder fängt mal klein an.
Im moment bin ich dabei einen Multiplayermodus über Netzwerk einzubauen. Mein erster Versuch hat zu einem ziemlich starken geruckele auf meinem schwächeren test Rechner geführt. Durch die Asynchronen Lese- und Schreibmethoden des Netzwerkstreams konnte ich das aber lösen.
Nun sende ich ganz naiv die Tastatureingaben von einem Rechner zum anderen. Das funktioniert eigentlich ganz gut, aber wie nicht anderes zu erwarten hängt die Spielfigur irgendwann auf dem anderen Rechner an einer Wand fest...
An dem Punkt bin ich jetzt. Es ist nicht so, dass ich nicht weiter weiss, mir fallen gleich mehrere dinge ein die ich besser machen kann. Aber mich würde interessieren wie es die Profis machen. Gibt es gute Bücher ( am besten kostenlose Onlinebücher) oder ähnliches zu dem Thema?
-
http://www.amazon.de/Spieleprogrammierung-DirectX-Netzwerkspiele-Spezialeffekte-Computing/dp/3898428273/ref=sr_1_8/028-9226152-3282927?ie=UTF8&s=books&qid=1186050723&sr=1-8
Dort wird in MS Windows ein Netzwerkspiel aufgebaut und detailliert beschrieben.
-
Dann muss ich ja auch gleichzeitig C++ und DirectX lernen

-
Grohool schrieb:
Nun sende ich ganz naiv die Tastatureingaben von einem Rechner zum anderen.
Du könntest z.B. von allen Objekten, die bewegt worden sind (u.a. die Spielfigur), die neuen Positionen an den anderen übertragen.
Was sind das denn für andere Ideen, die du hast?
-
Badestrand schrieb:
Du könntest z.B. von allen Objekten, die bewegt worden sind (u.a. die Spielfigur), die neuen Positionen an den anderen übertragen.
Ja, das könnte ich. Aber wenn ich das jeden Frame mache dann werden das ne ganze Menge Daten die ich übertragen muss. Im Moment sende ich neben der Tastatureingabe (1 Byte) noch 5 zusätzliche Bytes pro Frame die die Position und so des Spielers korrigiern.
-
Grohool schrieb:
Badestrand schrieb:
Du könntest z.B. von allen Objekten, die bewegt worden sind (u.a. die Spielfigur), die neuen Positionen an den anderen übertragen.
Ja, das könnte ich. Aber wenn ich das jeden Frame mache dann werden das ne ganze Menge Daten die ich übertragen muss. Im Moment sende ich neben der Tastatureingabe (1 Byte) noch 5 zusätzliche Bytes pro Frame die die Position und so des Spielers korrigiern.
es haengt vom spiel ab was 'besser' ist. bei strategiespielen ist es gut nur den input zu schicken, bei z.b. shooter sind eher die positionsdaten gaengiger.
-
@Grohol: alles an Daten bis ca. 1,5kb macht kaum einen Unterschied, da es noch mit in ein Packet reingeht.
-
Also wenn ich jetzt 6Byte alle 1/60 Sekunden schicke, dann könnte ich genauso gut 1500Byte alle 1/60 s verschicken? Das wär doof, denn soviel passt nicht durch meine Internetleitung.
-
1.5kb/packet ist die maximale groesse eines packetes, das ist nicht die minimale groesse, jedoch gibt es dennoch einen gewissen overhead, z.b. 20byte ip header usw. sodass du nicht viel vorteile hast ob du nun 1byte oder 16byte schickst.
-
OK, wenn es die Leitung nichtmehr packt dann macht es natürlich nen Unterschied

-
Grohool schrieb:
Im Moment sende ich neben der Tastatureingabe (1 Byte) noch 5 zusätzliche Bytes pro Frame die die Position und so des Spielers korrigiern.
Wenn du die Spieler-Position mitschickst, warum läuft er dann irgendwann nur noch gegen die Wand? Oder hab ich da was falsch verstanden?
-
Das mit der Spielerposition hab ich später erst dazugeschrieben. Jetzt läuft er nicht mehr gegen die Wand.