Was genau steht denn schon in deinem Multiplayer?
Möchtest du ein Server_Client-Modell machen, oder Client-Client?
Wieviele Spieler sollen daran teilnehmen können?
Ich würde einfach alle deine Bewegungen- die sich aus den Tastendrücken ja erschließen lassen- zum Server senden, und dieser kopiert Diese dann an alle anderen Teilnehmer.
Es wird sozusagen bei jeder Bewegung etwas gesendet, und der Server wartet, bis "alle" ihren "letzten Zug in dieser Millisekunde" zum Server gesendet haben, und broadcastet diese dann.
So würde ich das rein logisch angehen. Die technischen Hintergründe sollte sich eigentlich aus der Hilfe erschließen lassen-
das Problem ist und bleibt bei Realtime-Spielen die Synchronisation.
Es darf natürlich der mit dem schnelleren PC nicht 5-mal pro 100tel Sekunde eine Bewegung zum Server senden, und der mit dem langsameren PC nur 3 mal, bzw der Server muss immer "mitzählen" und somit immer gleich viele Aktionen der Kontrahenten wieder übermitteln.
Eine Möglichkeit dabei wäre der Fairnis halber, dass auch der einzelnen Spieler ihre eigenen Spieldaten nur ausgewertet vom Server sehen. Das heißt, dass ich immer nur wirklich das sehe, was der Server auch interpretiert hat. Ansonsten könnte es durch leichte "ruckler" oder so immer mal kleine Verschiebungen geben. Diese Lags würden dann dazu führen, dass Client A mit dem schnelleren PC Spieler B erledigt hat, aber Spieler B aufgrund seines langsameren PCs noch "weglaggen" konnte.
Soviel von meiner Idee dazu,
Gr33tz
Tafkadasom2k5
internet
- Tafkadasom2k5
- Beiträge: 1578
- Registriert: 13.08.2005 14:31
- Kontaktdaten:
- Tafkadasom2k5
- Beiträge: 1578
- Registriert: 13.08.2005 14:31
- Kontaktdaten:
Dazu muss man "feilen"...
Und ja, es wird laggy- was meinst du, warum Menschen mit hohen Pingkeiten immer gekickt werden
Es gibt Möglichkeiten das auszubügeln, aber das geht zu weit in die Thematik rein.
Ich würde mich erstmal auf NEtzwerk (100mbit) begrenzen...
Und ja, es wird laggy- was meinst du, warum Menschen mit hohen Pingkeiten immer gekickt werden

Es gibt Möglichkeiten das auszubügeln, aber das geht zu weit in die Thematik rein.
Ich würde mich erstmal auf NEtzwerk (100mbit) begrenzen...
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Was das Lag Problem angeht:
Die einzelnen clients sind weniger das Problem, nur wenn man es wirklich so macht dass der server erst die aktualisierten koordinaten der spieler raussendet sobald er alle erhalten hat wird es zum problem. Schickt der Server allerdings in regelmäsigen zeitabschnitten die daten raus, dann ruckeln halt wirklich nur die mit nem miserablen ping durch die gegend, wohingegen es bei allen anderen Perfekt weiter läuft.
Hier bleibts halt abzuwägen was einem lieber ist... flüssiger spielfluss mit n paar laggern, oder ein durchweg faires spiel wo alle unter einem leggenden leiden müssen...
Eine beliebte methode zum vermeiden von diversen rucklern bei lags ist übrigens die Interpolation, sprich das errechnen der wahrscheinlichen bewegung eines spielers. Veranschaulicht:
Wenn ein spieler 15 sekunden lang stur geradeaus rennt, ist es sehr wahrscheinlich dass er dies für ne gewisse zeit noch machen wird. Das merkt sich der server, und sollten von dem spieler keine aktuellen koordinaten kommen, setzt er halt die errechneten ein.
Bei einem 2D shooter recht einfach umzusetzen und vielleicht sogar halbwegs praktikabel wenn mans gut umsetzt...
Problem an der Sache:
Sollte unser geradeaus läufer urplötzlich an seinem heimischen pc die richtung wechseln, wird er natürlich dennoch weiter geradeaus laufen
Hier kommts aber auch wieder auf die umsetzung an... Wenn der client das darstellt was der user macht, kommt es zu fehlern in sachen kollision etc, da er zuhause woanders läuft als bei den anderen spielern...
Werden die koordinaten regelmäsig abgeglichen, so kann der spieler plötzlich springen... stellt der client nur die position dar, welche er vom sever als seine aktuelle erhalten hat, kann der spieler so oft die richtung wechseln wollen wie er will, solange der server keine neuen infos bekommen hat, wird er weiter interpolieren und (um das beispiel nochmal aufzugreifen) anstatt nach links wird er weiterhin geradeaus laufen...
@Tafkadasom2k5:
Also das auf n 100mbit lan zu begrenzen halte ich für sehr übertrieben, denn selbst wenn wir realistisch denken und eine durchsatzrate von vllt. 50mbit haben, bleibt immernoch die 50 fache geschwindigkeite von DSL 1000 über. Allerdings symetrisch, sprich up- und download mit gleicher geschwindigkeit... Jetz können wir mal hochrechnen was für datenmengen damit erreicht werden können, aber des spar ich mir an dieser stelle mal... Wichtiger ist nämlich dass sein spiel aller wahrscheinlichkeit nach nichtmal ein 10mbit Lan völlig auslasten wird, es sei denn er schickt mit seinen Daten einen gewaltigen overhead mit, aber selbst dann sollten sich mit einem 10mbit network auch mind. 16 spieler locker versorgen lassen und das auch bei passablen latenzzeiten...
Mfg
RaVeN
P.s.: Ich hoffe das ganze ist halbwegs verständlich, komme grade von Arbeit und nachdem ich die ganze zeit mit dem rad unter zeitdruck unterwegs bin, und das seit morgens um 5, macht mir diese hitze durchaus zu schaffen. Bei diversen verständnis problemen kann ich ja später noch nachbessern
Die einzelnen clients sind weniger das Problem, nur wenn man es wirklich so macht dass der server erst die aktualisierten koordinaten der spieler raussendet sobald er alle erhalten hat wird es zum problem. Schickt der Server allerdings in regelmäsigen zeitabschnitten die daten raus, dann ruckeln halt wirklich nur die mit nem miserablen ping durch die gegend, wohingegen es bei allen anderen Perfekt weiter läuft.
Hier bleibts halt abzuwägen was einem lieber ist... flüssiger spielfluss mit n paar laggern, oder ein durchweg faires spiel wo alle unter einem leggenden leiden müssen...
Eine beliebte methode zum vermeiden von diversen rucklern bei lags ist übrigens die Interpolation, sprich das errechnen der wahrscheinlichen bewegung eines spielers. Veranschaulicht:
Wenn ein spieler 15 sekunden lang stur geradeaus rennt, ist es sehr wahrscheinlich dass er dies für ne gewisse zeit noch machen wird. Das merkt sich der server, und sollten von dem spieler keine aktuellen koordinaten kommen, setzt er halt die errechneten ein.
Bei einem 2D shooter recht einfach umzusetzen und vielleicht sogar halbwegs praktikabel wenn mans gut umsetzt...
Problem an der Sache:
Sollte unser geradeaus läufer urplötzlich an seinem heimischen pc die richtung wechseln, wird er natürlich dennoch weiter geradeaus laufen

Hier kommts aber auch wieder auf die umsetzung an... Wenn der client das darstellt was der user macht, kommt es zu fehlern in sachen kollision etc, da er zuhause woanders läuft als bei den anderen spielern...
Werden die koordinaten regelmäsig abgeglichen, so kann der spieler plötzlich springen... stellt der client nur die position dar, welche er vom sever als seine aktuelle erhalten hat, kann der spieler so oft die richtung wechseln wollen wie er will, solange der server keine neuen infos bekommen hat, wird er weiter interpolieren und (um das beispiel nochmal aufzugreifen) anstatt nach links wird er weiterhin geradeaus laufen...
@Tafkadasom2k5:
Also das auf n 100mbit lan zu begrenzen halte ich für sehr übertrieben, denn selbst wenn wir realistisch denken und eine durchsatzrate von vllt. 50mbit haben, bleibt immernoch die 50 fache geschwindigkeite von DSL 1000 über. Allerdings symetrisch, sprich up- und download mit gleicher geschwindigkeit... Jetz können wir mal hochrechnen was für datenmengen damit erreicht werden können, aber des spar ich mir an dieser stelle mal... Wichtiger ist nämlich dass sein spiel aller wahrscheinlichkeit nach nichtmal ein 10mbit Lan völlig auslasten wird, es sei denn er schickt mit seinen Daten einen gewaltigen overhead mit, aber selbst dann sollten sich mit einem 10mbit network auch mind. 16 spieler locker versorgen lassen und das auch bei passablen latenzzeiten...
Mfg
RaVeN
P.s.: Ich hoffe das ganze ist halbwegs verständlich, komme grade von Arbeit und nachdem ich die ganze zeit mit dem rad unter zeitdruck unterwegs bin, und das seit morgens um 5, macht mir diese hitze durchaus zu schaffen. Bei diversen verständnis problemen kann ich ja später noch nachbessern

AMD Athlon64 3000+, 1024MB DDR-RAM, Geforce 8600GT, WinXP SP2, DirectX 9.0c, PureBasic 3.94
- Tafkadasom2k5
- Beiträge: 1578
- Registriert: 13.08.2005 14:31
- Kontaktdaten:
Ja, das war auch nur so gemeint, dass er es vorerst auf FastEthernet-Lan basierend schreiben soll,und dann vielleicht zusätlich (falls es nötig ist) ein paar Optimierungen hinzufügen.RaVeN99 hat geschrieben: @Tafkadasom2k5:
Also das auf n 100mbit lan zu begrenzen halte ich für sehr übertrieben, denn selbst wenn wir realistisch denken und eine durchsatzrate von vllt. 50mbit haben, bleibt immernoch die 50 fache geschwindigkeite von DSL 1000 über. Allerdings symetrisch, sprich up- und download mit gleicher geschwindigkeit... Jetz können wir mal hochrechnen was für datenmengen damit erreicht werden können, aber des spar ich mir an dieser stelle mal...
Gr33tz
Tafkadasom2k5
P.S.: Danke für den guten Beitrag, Raven99!

OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!