Nachrichten mit DirectPlay

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Noobody

Betreff: Nachrichten mit DirectPlay

BeitragMo, Apr 16, 2007 9:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe ein netzwerkfähiges Pong programmiert.
Es funktioniert so, dass es in jedem Schleifenablauf eine Nachricht an den anderen Computer sendet, die x und y des Spielers enthalten und seine verbleibenden Leben.
Zuerst wollte ich für jede Variable eine eigene Nachricht schicken, aber das ist eine unnötige Erhöhung des Netzwerkverkehrs.
Jedoch habe ich Probleme, die einzelnen Daten aus der Nachricht herauszulesen.
Ich habe das Problem so gelöst, dass es bei der zu sendenden Nachricht zwischen den drei Variablen ein "q" und ein "w" einfügt.
Dann sucht das Programm bei der eingehenden Nachricht mit Instr() nach "q" und "w", ermittelt so die Länge der Variablen und liest sie dann mit Right(), Mid() und Left() aus.
Diese Lösung ist aus meiner Sicht ziemlich unschön.
Gibt es da noch andere Lösungen oder ist die obige Methode die einzige?
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Apr 16, 2007 10:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich kenne mich mit DP nicht so gut aus, aber ich würde generell davon abraten, jeden Schleifendurchlauf eine Nachricht zu senden. Dieses könnte zu einer stauung führen (merkt man, wenn die Verzögerung zwischen beiden Rechnern immer größer wird). Das Stringparsing ist bei DP allerdings, so weit ich es mitbekommen habe, die einzige Möglichkeit, mehrere Daten auf einmal zu schicken.

Vorschläge:

- Eine Beschäftigung mit TCP oder UDP lohnt sich sehr (Stringparsing verfällt und ist wesentlich schneller)

- Allgemein sollte man nur 'stichprobenartig' Daten senden, zB alle 200 ms oder so, das reicht meistens (dabei aber eine frameskalierte Geschwindigkeitsvariable benutzen).
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Noobody

BeitragMo, Apr 16, 2007 14:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Stauung und somit die Verzögerung hab ich so geregelt, dass man beim Eintritt in die Schleife eine Nachricht sendet und danach auf eine einkommende Nachricht wartet. Somit bleiben die Rechner relativ synchron, da die nächste Nachricht erst gesendet wird, wenn der andere Rechner geantwortet hat.
Ich hab das deswegen mit DirectPlay gemacht, weil das mein erstes Game mit BlitzBasic ist, darum hab ich die Methode gewählt, die am einfachsten war.
Dann werd ich mich jetzt wohl mit TCP und UDP beschäftigen müssen^^
Aber es hat hier ja sicher n paar gute Tutos
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

Axe

BeitragMo, Apr 16, 2007 14:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo ich habe am Anfang auch so angefangen wie du. Es gibt noch eine weitere Möglichkeit, die jedoch auch nicht viel besser ist: Man kann für die verschiedenen Arten der Variablen (Integer, Float) feste Längen nehmen. zB 6 Stellen für Int und 12 für Float. Der Befehl dazu heißt rSet bzw lSet. Wenn du dann noch die Reihenfolge fest machst kannst du mit Trim die Sachen recht einfach übertragen.
Es gab dazu auch ein Tut ich finds bloß auch nicht mehr.

Mfg Axe
Projekte:
Ping Pong 2D Version 2.1
Weitere Infos: axesite.de

skey-z

BeitragMo, Apr 16, 2007 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
ich würde dir auch raten nur eine Nachricht zu schicken, wenn es eine veränderung gab, also zB der Spieler sich bewegt, und die leben nur dann, wenn es sich verändert, den jeden Schleifendurchlauf die leben zu schicken, den diese ändern sich ja nicht so oft und verursacht nur Datenmüll.

zudem würde ich nur kurze nachrichten schicken, zb eine 1 wenn sich ein spieler dazu gesinnt, eine 2 wenn er sich abmeldet, ne 3 wenn er ein leben verliert, 4 und 5 für die bewegung und für den server noch die position, bzw winkel und geschwindigkeit des Balls.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

Noobody

BeitragMo, Apr 16, 2007 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
@skey-z
das wäre eine gute idee.
allerdings wird die nachricht mit den daten des balls gar nicht benötigt, da jeder spieler für sich selbst die bewegung des balls ausrechnet.
PS: kann mir jemand ein tut für TCP mit PM schicken?
hab dazu leider noch nix gefunden
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

skey-z

BeitragMo, Apr 16, 2007 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
http://www.blitzbase.de/tutorials/rob_13.htm

http://www.blitzbase.de/menu/2t.htm
http://www.blitzbase.de/menu/2w.htm

und auf http://www.robsite.de/index.php findest du zu zig Themen Tutorials
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group