Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Gotbread

Alter Hase

  • »Gotbread« ist der Autor dieses Themas

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

1

02.01.2009, 17:16

designfrage - rennspiel

hallo,

ich habe grade ein kleines netzwerk-rennspiel projekt am laufen.
das spiel ist soweit es geht auch "fertig", netzwerk ist auch schon
vernünftig gekapselt.

das spiel nutzt eine physik-engine für die fahrzeuge, nur wie wird die
am besten integriert?

jetzt habe ich bisher zwei möglichkeiten gefunden, das ganze im netzwerk
zu realisieren:

1)
der host kontrolliert die ganze physik, die clients senden pro frame
ihre daten (beschleunigen, lenken) an den host, der berechnet die
positionen und sendet eine transformationsmatrix aller am spiel beteiligten objekte zurück.
vorteil: physik läuft stabil
nachteil: bandbreite zu groß

2)
jeder spieler hat seine eigene physik am laufen, jeder sendet nur seine
statusänderungen an alle anderen.
vorteil: geringe auslastung
nachteil: physik läuft verteilt, möglicherweise mit abweichenden ergebnissen

im augenblick würde ich zu variante 1 tendieren, aber was meint ihr dazu?
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

2

02.01.2009, 17:45

Es ist ganz clever, die Position und die Geschwindigkeit zu übertragen, dann kann man, während man auf ein neues Paket wartet noch etwas interpolieren.

Wichtig wäre es auch, dass auf dem Server nocheinmal alles berechnet wird und regelmäßig (muss ja nicht jede Frame sein) alle Daten an alle Clienten gesendet wird, damit man nochmal eine Komplettsynchronisation hat.

Also, dass was der Spieler macht, wird an den Server gesendet und der sendet zurück, was sich daraus ergeben hat. Wie oft, musst du am besten ausprobieren.
Lieber dumm fragen, als dumm bleiben!

Gotbread

Alter Hase

  • »Gotbread« ist der Autor dieses Themas

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

3

02.01.2009, 17:54

Zitat von »"Jonathan_Klein"«


Es ist ganz clever, die Position und die Geschwindigkeit zu übertragen, dann kann man, während man auf ein neues Paket wartet noch etwas interpolieren.

an die position und geschwindigkeit kommt man aber nur über die physik
engine, sonst gibt das probleme.

also bist du auch für die erste methode?
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

4

02.01.2009, 21:04

Naja, ein Netzwerkspiel das mit der Zeit unsynchron wird ist einfach murks. Und naja, es spielt hier vielleicht noch nicht so die Rolle, aber wenn der Server nicht die Spiellogik selber berechnet, sondern die Werte vom Clienten akzeptiert kann man sehr viel einfacher schummeln.

Achja: Es wäre denke ich auch ganz gut, wenn du nicht nur auf die Werte des Servers wartest, sondern die Lenkung z.B. spontan reagiert und am Client schon durchgeführt wird. Sobald das Paket vom Server dann da ist, vergleichst du die Werte und bei zu großer Abweichung übernimmst du die Werte vom Server (vielleicht nicht direkt übernehmen, sondern über einen kurzen Zeitraum auf die richtige Position rutschen lassen, oder was weiß ich, damit es nicht so hakelig wird).

Insgesamt ist es wahrscheinlich kniffelig, das schön sauber hinzukriegen, du wirst wahrscheinlich einfach experimentieren müssen.
Lieber dumm fragen, als dumm bleiben!

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

5

03.01.2009, 00:11

Ich würde die Updates nicht jedes Frame senden. Da wirst du mit der Bandbreite nur noch schwer hinkommen. Mach es nach Zeit, meinetwegen alle 0.2 sec oder so. Erfahrungswerte hab ich aber auch nicht, das kommt drauf an wie viele Leute auf einem Server spielen.

Ach und der Server sollte die Updates von Positionen unbedingt prüfen, um z.b. Cheaten zu vermeiden. Wird nämlich gerne manipuliert sowas.

Socke

Werbeanzeige