39DLL, Übertragung optimieren, "External Calls"

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • 39DLL, Übertragung optimieren, "External Calls"

      Hallo Leute
      Ich sitze nun seit längerem an einem Onlinespiel und benutze 39DLL.
      Ich habe mich ein bisschen im Internet umgeschaut und habe erfahren, dass die "external_calls" in Game Maker ein Spiel unter Umständen stark verlangsamen können.
      Hinter jedem write- und read-script (writebyte, writestring,...) verbirgt sich ein external_call. Mittlerweile häufen sich diese, besonders wenn viele Mitspieler auf dem Server verbunden sind.
      Nun hatte ich die Idee, dass ich ALLE Nachrichten, die gesendet werden sollen, in einen einzigen String zu packen und dann über die Funktion writestring() zu senden und mit readstring() zu empfangen.
      Beispiel:

      GML-Quellcode

      1. //Vorher
      2. writebyte(0);
      3. writebyte(100);
      4. writeshort(23);
      5. writebyte(0);
      6. writebyte(1);
      7. writestring("Hallo");
      8. writebyte(2);
      9. writeshort(33);
      10. writeshort(12);
      11. //wird zu ->
      12. writestring("0|100|23|0|1|Hallo|2|33|12");
      Alles anzeigen


      Jetzt versuche ich mit den zahlreichen Game Maker-Stringfunktionen den String zu entpacken und zu gliedern, sodass ich die Werte wie vorgesehen weiterverwenden kann.

      Nun meine eigentliche Frage:
      Ist das sinnvoll? Ich glaube nämlich, dass ich gerade was die Reduktion von external_calls angeht ordentlich an Performance gewinnen kann.
      Was haltet ihr davon? Habt ihr irgendwelche Tipps? Ich würde mich auch über eine kleine Hilfestellung freuen, wie ich einen String wie im Beispiel em effizientesten umwandeln kann.
      Schonmal Danke im Voraus ;)

      "Make love, not Warcraft"
    • Ist das sinnvoll? Ich glaube nämlich, dass ich gerade was die Reduktion
      von external_calls angeht ordentlich an Performance gewinnen kann.

      Was haltet ihr davon? Habt ihr irgendwelche Tipps? Ich würde mich auch
      über eine kleine Hilfestellung freuen, wie ich einen String wie im
      Beispiel em effizientesten umwandeln kann.
      String Verarbeitung ist langsamer als einfachere Memory Kopien (abgesehen von der external_call Funktion). Strings belegen mehr Speicher. (Anzahl der Zeichen+1 Bytes)

      Du könntest das ganze in GML zu Bytes umwandeln und dann mit chr in einen String umwandeln. (Ob das schneller ist, kannst du ja testen)
      wupto.net/ Nicht meine Seite!
      We love Koalas.

      GM-D-Spam-o-Meter: 32%
    • Danke für eure Tipps. Ja, ich achte sehr darauf wann ich was sende. Hab mich intensiv mit sowas beschäftigt. Mein Spiel arbeitet einmal mit 39DLL UND mit GMOgre3D. Dadurch entstehen natürlich eine Menge external_calls. Und die können ein Spiel halt stark verlangsamen und durch das senden eines einzelnen Strings hatte ich gehofft external_calls zu reduzieren.

      Bei meinem Spiel handelt es sich um einen Top-Down-Shooter mit Taktik- und Rollenspielelementen. (Ein Uni-Projekt für einen Gamedesign-Kurs)
      Man soll es mit möglichst vielen Leuten spielen können und im Moment versuche ich die Performance zu steigern.

      "Make love, not Warcraft"