Netzwerkprobleme
Übersicht

IonPainterBetreff: Netzwerkprobleme |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Holla,
Gegeben ist: ![]() ![]() ![]() ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ü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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
... ja, das ist wahr, hat aber den Vorteil das langsame Maschinen Frames droppen und nicht Netzwerkpakete anstauen | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group