Netzwerkprobleme

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

IonPainter

Betreff: Netzwerkprobleme

BeitragMi, Sep 07, 2005 22:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Holla,

Gegeben ist:

Arrow Funktionierender Netcode auf UDP Basis
Arrow Serverprogramm welches einfach nur alle Werte an alle Clients verteilt
Arrow Ping von <5ms
Arrow 100 Mbit

Problem:

Bisher übertrage ich in der Sekunde 30x die Spielerposition (x - y - z) und die Rotation (pitch - yaw). Ich teste das ganze über Lan also sollte die Bandbreite keine Rolle spielen. Nun habe ich den Effekt das die Bewegungen ruckelig aussehen. Daraufhin gab man mir im Chat den Tipp nicht die Positionen sondern die Bewegungen zu übermitteln.

Nun ist der Code umgeschrieben so das er:

Jeden Schleifendurchlauf die Movements in eine Variable addiert.
Diese addierten Variablen werden zusammen mit der Rotation 15x in der Sekunde versendet und danach die Variable wieder gelöscht. Ausserdem wird alle 500ms ein Check der Koordinaten durchgeführt.

Leider stimmt die Position des Spielers nie! Immer versetzt die Positionskorrektur den Spieler um einige Einheiten, es scheint der Spieler wird zu langsam bewegt. Ich bin mir aber eigentlich relativ sicher die richtigen Werte zu übermitteln.

Hat einer eine Lösung für mein Problem? Wie würdet Ihr den NEtcode in einem Frameunabhängigen Programm gestalten? (brauche kein Code, reine Aufbauerklärung reicht)

Gruß,
Ion
 

BIG BUG

BeitragMi, Sep 07, 2005 23:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Übertrage jedesmal einfach Position + Bewegungsrichtung(z.B. aktuelle Drehung(Yaw+Pitch als umgerechneter Short) + die gedrückten Tasten(in ein Byte gequetscht).
Damit solltest Du dann auch keine Probleme mit unterschiedlichen FPS bekommen.

Durch Interpolation kannst Du dann verhindern, dass die Drehungen zu hakelig wirken.
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)
 

IonPainter

BeitragMi, Sep 07, 2005 23:28
Antworten mit Zitat
Benutzer-Profile anzeigen
und wenn PC1 1000 fps hat
und pc2 nur 30

dann schickt pc2 pc1 30 keyhits _wert ist fix - es sind 30 pakete_
die werden dann bei pc1 mit dem framewert (1000/1000=1) multipliziert und ergeben eine viel kürzere bewegung als auf pc2 (1000/30=33)

asyncron

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Sep 08, 2005 0:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Wieso kürzere Bewegungen. Sende einfach die Bewegung OHNE den umgerechneten Skallierungsfaktor! Der Zielrechner hat/kann eine andere Geschwindigkeit, und dieser muß dann halt den eigenen Skallierungsfaktor benutzen. Nicht den des Quellrechners. Wenn nur Positionen gesendet werden, dann ist das alles sowieso egal. Wenn u.a. (aus performence Gründen) die Bewegungen gesendet werden, dann bitte nur diese, und ab und mal eine Chekposition zur Kalibrierung.
 

Klaas

BeitragDo, Sep 08, 2005 8:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Du solltest auch den Netzwerkcode von der Framerate abkoppeln über Rendertweening. In erster Linie sollte der Input- und Netzwerkcode laufen dann die restliche Zeit ins Rendern stecken.
 

IonPainter

BeitragDo, Sep 08, 2005 11:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Rendertweening? Also bisher sieht mein Code zum Bewegen etwa so aus:

Code: [AUSKLAPPEN]

while ...
stz = millisecs()

... Empfangen der Daten ...

moveentity irgendwas, 0, 0, 1*scz

if nz + 33 < millisecs() then

... Senden der Daten ...
nz = millisecs()

endif

renderworld
flip

scz = millisecs() - stz
wend
 

Klaas

BeitragDo, Sep 08, 2005 14:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Rendertweening ... das geht mit CaptureWorld

Hier die OH:
http://www.blitzbase.de/befehle3d/captureworld.htm

Hier ein Basis-Framework:
http://www.blitzbasic.com/code...php?code=9
 

fliege

BeitragDo, Sep 08, 2005 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Wäre es nicht möglich einfach nur die aktuellen positionen des Spieler1 zu senden und dann bei Spieler2 zu interpolieren?
Man könnte ja an jedem empfangenen Punkt einen Waypoint erstellen, aus dem eine route zusammengesetzt wird.

Fliege
Wer weiß was kommt.. ?
 

IonPainter

BeitragDo, Sep 08, 2005 16:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Klaas hat Folgendes geschrieben:
Rendertweening


Wenn ich es richtig verstanden habe würde es dann aber nicht immer die aktuellste Position die bekannt ist auch angezeigt sondern immer noch nach Empfang der neuen Pos interpoliert. Genauergesagt er fängt das Interpolieren erst an wenn schon eine aktuellere Position bekannt ist.

( Korrigiert mich wenn ich falsch liege! )

fliege hat Folgendes geschrieben:

Wäre es nicht möglich einfach nur die aktuellen positionen des Spieler1 zu senden und dann bei Spieler2 zu interpolieren?
Man könnte ja an jedem empfangenen Punkt einen Waypoint erstellen, aus dem eine route zusammengesetzt wird.


Ja, sowas ähnliches hat mir Vertex im Chat auch vorgeschlagen, ich werde versuchen dies einmal umzusetzen.

Gruß,
Ion
 

Klaas

BeitragDo, Sep 08, 2005 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
... ja, das ist wahr, hat aber den Vorteil das langsame Maschinen Frames droppen und nicht Netzwerkpakete anstauen

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group