Netzcode UDP
Übersicht

![]() |
FirstdeathmakerBetreff: Netzcode UDP |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
da ich nirgens hier im Forum einen guten Code für ein Netzwerkshooter gefunden habe, wollte ich mal Fragen wie man den Netzcode denn am besten realisiert. Ich habe in der Vergangenheit immer wieder etwas damit rumexperementiert, Chat´s sind auch kein Problem, aber mir fehlt es an einer gewissen Strukturiertheit für größere Sachen, wenn man z.B. in einem Shooter die ganzen Gegnerveränderungen, Schüsse e.t.c. verschicken soll. Wie würdet ihr das angehen, oder habt ihr zufällig einen gescheiten Beispielcode zur Hand? |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
vieleicht währe es dort besser die befehle auf blatt papier zu docomentieren, die man benötigt, und damit du die strucktur nicht verlierst alles vieleicht globalisieren und in einer procedure packen!
vieleicht hilft es dir, und hoffe das ich nicht zu grossen müll gelabert habe! |
||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, das ist mir jetzt keine so große Hilfe, ich habe bisher so gearbeitet, dass ich eine Funktion Clientcommands() geschrieben habe, die alle Befehle ausführt die vom Server komman:
BlitzBasic: [AUSKLAPPEN] ;Clientcommands (Lauscher) |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
Mathias-Kwiatkowski |
![]() Antworten mit Zitat ![]() |
---|---|---|
naja gut ok du arbeitest mit udp... damit kenn ich mich nicht wirklich aus, tcp währe einfacher!!! (für mich) aber leider nicht fürs game da udp schneller ist, aller dings kann es bei udp ja auch sein das etwas nicht ankommt...
naja strucktur, dein code is doch eigentlich übersichtlich... du kannst ja auch mehere proceduren machen oder mit dem befehl include machen, so bleibt das hauptproggi übersichtlicher!! falls ich in einer weise daneben lieg sorry! aber ich würde es z.b. etwa so machen ----> hauptproggi include "playerdaten.bb" include "welt.bb" player(x,y) ;also z.b. wo sich der player befindet welt(grösse, ("alles was du noch brauchst für deine welt")) nebenproggi playerdaten function player(x,y) ;also z.b. wo sich der player befindet nebenproggi welt.bb function weltwelt(grösse, ("alles was du noch brauchst für deine welt")) <----- so in etwa würde ich es machen!! dann hast du eigentlich eine übersicht!! auf alle quelltexte, und du verlierst dich darin nicht! und muss nicht lange suchen! wenns geholfen hat sag bescheid, danke |
||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hat mir jetzt nicht so wirklich geholfen, da ich den oben eingefügten Code eh schon in einer Include hatte. Und ne Funktion "Player" halte ich für sehr überflüssig, oder hab den Sinn und Zweck noch nicht so ganz kapiert. Ich mach normalerweise eine Gamehauptschleife in der alle Objekte upgedatet werden, das ist soweit schon recht Übersichtlich, hab also keine probleme mit dem Strukturieren allgemein, sondern mit den speziellen Strukturen die für einen Multiplayershooter notwendig sind.
Was vielmehr mein Problem ist: Wie bekomme ich es genau hin, die Spiele zu synchronisieren ohne zu viel Bandbreite zu verballern? Reicht es wirklich aus, immer nur die Änderung der Geschwindigkeit und Richtung zu senden? Wird das nicht auf die Dauer etwas ungenau? Was ist mit der Ping-Time, die sorgt doch dafür dass die Daten erst etwas verzögert ankommen, müsste man dann nicht eine globale (Computerübergreifende) Zeiut einführen und dann bei Sendungen diese mitschicken, sodass der andere Computer auch sieht, wann die Veränderung statt gefunden hat, und dann dementsprechend zurück rechnet? Oder ist das zuviel Aufwand, und bringt eigentlich nicht so viel? Meine eigentliche Frage war eigentlich: Macht man es generell so, dass man eine Funktion (wie z.B. meine oben genannte) schreibt, in der alle Netzwerkdaten angenommen und verarbeitet werden, oder gibt es da noch andere Möglichkeiten? |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich arbeite auch gerade an einem kleinen 2D-NetzwerkSpaceShooter(extra um mal ein bisschen Praxis in diesem Netzwerkkram zu bekommen). Bei mir gibt es aber nur 4 Bewegungsrichtungen, was die Sache etwas vereinfacht.
Ich habe es so gemacht, dass wenn der Spieler die Bewegungsrichtung ändert oder schießt einfach die Position sowie die neue Richtung an alle Mitspieler versendet wird(also P2P). Schüsse werden so ebenfalls nur erstellt und dann von jedem Client selbst berechnet. Trifft ein Schuss, so wird dieser bei jedem Spieler erst nur deaktiviert, der "Einschlag" muss dann vom Erzeuger mit exakter Position bestätigt werden. Also immer wenn was passiert, schicke ich auch die genaue Postitionsangabe mit und jeder Spieler verwaltet sich selbst und seine erzeugten Schüsse. Damit keine Startplätze doppelt belegt werden, wird vom Server zufällig eine Basisnummer erzeugt und eine eindeutige Spielernummer vergeben. Basisnummber+Spielernummer ergibt dann die Nummer des Startplatzes. Einen Latency(Verzögerung)-Ausgleich oder Paketkontrolle(wegen UDP) habe ich noch nicht eingebaut, eine kleine Netzwerkschlacht mit 8 Spielern hatte aber trotzdem schon gut funktioniert. Damit das Ganze dann auch im Internet gut läuft werde ich beides aber wohl noch einbauen. Ansonsten werden alle Messages vor meiner Updatefunktion gesammelt und in einen Type gestellt(die Daten die bei jeder Message gleich sind, wie Messageart/sendender Spieler/IP/Port/Paketnummer etc.) In einer zusätzlichen Bank werden dann die messageabhängigen Daten wie Postitionsangaben abgespeichert. |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Den letzten Teil hab ich noch nicht so wirklich verstanden:
Zitat: Ansonsten werden alle Messages vor meiner Updatefunktion gesammelt und in einen Type gestellt(die Daten die bei jeder Message gleich sind, wie Messageart/sendender Spieler/IP/Port/Paketnummer etc.)
In einer zusätzlichen Bank werden dann die messageabhängigen Daten wie Postitionsangaben abgespeichert. Was hat das für einen Sinn und Zweck wenn du die Messages abspeicherst? |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ob das so sinnvoll ist weiß ich selbst auch noch nicht ![]() Erstmal war mir wichtig eine eigene Schnittstelle zu den Netzwerkbefehlen zu schaffen, um später testweise dann auch einfach auf TCP wechseln zu können und an jedes Paket unnütze Last dranhängen zu können(für Lasttests). Egal ob Lobby oder Spiel, die Netzwerkroutinen bleiben die gleichen. Dann wäre dann noch das zusammenfassen von Paketen(z.B. bei mehreren lokalen Spielern) und Paketsicherung... |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group