Nachrichten mit DirectPlay
Übersicht

![]() |
NoobodyBetreff: Nachrichten mit DirectPlay |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group