39Dll: Ein simples Spiel

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

    • Der Witz an der Sache ist, doppelter RoomSpeed, doppelter Ressourcenverbrauch. Ob ich 30 fps berechnen muss oder 60, das ist für mich gleich mal die doppelte Belastung. Und der GM ist schon nicht der schnellste. Da muss man das meiner Meinung nach nicht auch noch herausfordern.
    • Also ich benutz nur noch 60 Fps bei meinen Spielen, bewegungen wirken viel geschmeidiger, das ist mir der doppelte Resourcenverbrauch auf jeden fall wert. Ich denke auch das es besser ist bei der 39dll 60 Fps zu wählen.
    • Latenz ausgleichen

      Ich habe gerade einen interessanten Artikel gefunden, der Euch vielleicht auch ineteressiert - ist allerdings in Englisch. Wenn ich durch bin, mach ich vielleicht 'ne Überstzung, bzw. eher ein Example

      LATENCY COMPENSATION

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Melancor ()

    • Ich hab' mir Melancor's Link ( noch ) nicht angeschaut, allerdings würd' ich ( wie bei einem seiner Posts beschrieben ;) ) z.B. nur senden, wenn

      GML-Quellcode

      1. return fps > 57 // Oder wie auch immer^^

      TRUE wiedergibt.

      Außerdem evtl. mit dem Drücken der Tasten + Deltatime ( ein Thread auf der GMC handelt davon, ich weiß nur grad' nicht, wo er ist ;) ) schreiben,
      sollte nicht zu Stark aufen Putz hauen.

      Ich hoffe, ihr konntet das Nachverfolgen :P

      Gruß, Phoenix :)
    • UDP verwenden

      Bisher haben wir nur über TCP gesprochen. Aber gerade die hochfrequente Übermittlung der Spielerposition, wie in diesem Echtzeit-Spiel gezeigt, ist geradezu geschaffen für UDP astatt TCP. UDP ist wesentlich schneller, das ist der Hauptgrund. Da ich am Anfang meine Probleme damit hatte, will ich auch noch 1-2 Sachen dazu sagen:

      Wenn Ihr Pakete über UDP versendet, ändert sich nur der "sendmessage" Befehl. Man braucht die IP-Adresse des Empfängers, und der Port ist ein anderer. Genau gesagt braucht Ihr zwei Ports: einen zum senden, und einen anderen zum Empfangen.
      Wenn ein Spieler verbindet, wird seine IP-Adresse vom Host mit lastinIP() ausgelesen, und zusammen mit der Spieler-ID an alle Clients verteilt. In dem Beispiel hier gibt es zwar nur einen Client und einen Host.... hier würde also der Host als Antwort die eigene IP an den Client schicken, und die Spieler-ID entfällt sowieso. Hat man mehrere Clients, sollte man auch verschiedene Ports verwenden (ansonsten sendet man eben die Spieler-ID mit). Muß nicht sein, läuft aber schon glatter.Ein Beispiel:

      Quellcode

      1. case receiveid:
      2. playerid=readbyte();
      3. UDP_in = udpconnect(3333+playerid,true);
      4. UDP_out = udpconnect(3433+playerid,true);
      5. break;

      "receiveid" heißt, der Client kriegt gerade seine playerID vom Host mitgeteilt. Alle anderen Clients bekommen stattdessen eine "newplayer"-Message, die sieht bei mir dann gekürzt so aus:

      Quellcode

      1. case newplayer:
      2. player = instance_create(0, 0, objRemote);
      3. player.playerid = readbyte();
      4. player.nick = readstring();
      5. playerip[player.playerid] = readstring();
      6. playernum+=1
      7. break;


      Um dann Messages über UDP zu versenden, habe ich sowas in der Art:

      Quellcode

      1. // der obere Teil wie bei TCP
      2. for (i=0;i<playernum;i+=1)
      3. //if i!=playerid // falls er die Nachricht NICHT an sich selbst senden soll
      4. sendmessage(UDP_out, playerip[i], 3333+i);

      und zum Empfangen sowas:

      Quellcode

      1. while (1)
      2. {
      3. size = receivemessage(UDP_in); if (size<=0) break;
      4. // der Rest wie bei TCP
      5. }


      Wenns nicht funktionierte, war mein Problem meist daß ich irgendwo einen falschen Port angegeben habe (z.B. einen bereits belegten). Wenn Ihr nur zwei Spieler wollt, könnt Ihr Euch wie gesagt die PlayerID sparen.

      So kann ich (bei room_speed 60) getrost alle 2-3 Steps oder - bei nur zwei Spielern - sogar jeden Step die Spielerkoordinaten austauschen, was mit TCP schon delikat war.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Melancor ()

    • Hi ich fand das tutorial auch ziemlich gut

      (gäbs hiern thanks button hätte ich ihn 100pro schon gedrückt :D)

      jedoch funktioniert bei mir das connecten über die ip nicht (jedenfalls nicht auf einen anderen rechner)?

      weiß jemand woran das liegen könnte mit 127.0.0.1 klappts nämlich und heute in der schule als wir es ausprobiert hatten hat es auch funktioniert aber wieso will es privat nich??

      Bitte kann mir jmd. helfen :(

      :)
      Ich will wie mein Opa im Schlaf sterben, nicht heulend und schreiend wie sein Beifahrer.





      I am a in the GM Quiz! :heul: :vogel:

      :gmlove:

      xD
    • jaja mit 127.0.0.1 gehts ja gut aber ich will ja auch das jeder belibig andere einen eigenen server hosten kann müssen bei dem dann auch die Ports frei sein? Und gibt es nicht einen port der immer frei ist und den man mit dem gamemaker benutzen kann?
      Ich will wie mein Opa im Schlaf sterben, nicht heulend und schreiend wie sein Beifahrer.





      I am a in the GM Quiz! :heul: :vogel:

      :gmlove:

      xD
    • jaja mit 127.0.0.1 gehts ja gut aber ich will ja auch das jeder belibig andere einen eigenen server hosten kann müssen bei dem dann auch die Ports frei sein? Und gibt es nicht einen port der immer frei ist und den man mit dem gamemaker benutzen kann?
      Nö. Alle Ports sind belegt, sonst können Hacker rein.
      Ich werf mal hier ne frage ein. Es heißt immer man muss einen Port öffnen. Aber wie zum Kuck-kuck macht man das??
      <Router name> Portfreigabe -> google.
      wupto.net/ Nicht meine Seite!
      We love Koalas.

      GM-D-Spam-o-Meter: 32%
    • Demnächst stell ich aber ein neues Tutorial rein, mit einer "gescheiten" Übertragung der Daten und für >2 Spieler.

      ich weiß is schon lange her das du das geschriben hast aber ich fänds cool wenn du das machen würdest weil dein jetziges hat mir richtig gut gefallen

      Gibts irgentwo auf gm-d des eigentlich schon??

      könnte mir jemand sagen wo es sowas gibt oder

      mir sagen oder nach welchem prinzip ich >2 spieler mache??

      thx :)
      Ich will wie mein Opa im Schlaf sterben, nicht heulend und schreiend wie sein Beifahrer.





      I am a in the GM Quiz! :heul: :vogel:

      :gmlove:

      xD

    • ich weiß is schon lange her das du das geschriben hast aber ich fänds cool wenn du das machen würdest weil dein jetziges hat mir richtig gut gefallen

      Gibts irgentwo auf gm-d des eigentlich schon??

      könnte mir jemand sagen wo es sowas gibt oder

      mir sagen oder nach welchem prinzip ich >2 spieler mache??
      http://www.gm-d.de/wbb/index.php/Thread/15679/39-dll-mehr-als-2-spieler/
      39dll: Verbindung und Kommunikation

      MfG Henrik1235
      wupto.net/ Nicht meine Seite!
      We love Koalas.

      GM-D-Spam-o-Meter: 32%
    • (oberer Teil gelöscht)

      EDIT:

      Ok habe nun mit viel ausprobierens ... mein Problem gelößt.

      Jedoch ist es nun sehr,sehr ruckhaft und ich würde es gerne mit Udp probieren jedoch hätte ich dazu ein par fragen:

      muss dafür JEDER spieler die ports offen haben,oder wie stellt man damit eine einfache verbindung her?

      (ein codebeispiel wäre nett)

      werden die befehle wie tcpaccept... überhaupt noch benötigt oder braucht man nur dieses udpconect??



      Thx im Vorraus :)
      Ich will wie mein Opa im Schlaf sterben, nicht heulend und schreiend wie sein Beifahrer.





      I am a in the GM Quiz! :heul: :vogel:

      :gmlove:

      xD

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von miau ()