39dll: Verbindung und Kommunikation

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

    • Hi,
      Ich benutze jetzt die Engine : , damit ich mehrere Leute in einem Level haben kann (Mit Server und so).
      39dll: Verbindung und Kommunikation
      (engine ist im anhang)


      Das Problem ist ,ich will einem Top-Down Sooter machen und wenn ich rechte mousetaste
      drück soll meine figur schießen und die anderen sollen das AUCH sehen.
      Wie mach ich das ??
      (das Bullet soll in richtig Maus fliegen (natürlich aber nur in die x,y der mouse von dem der abgeschossen hat))

      (Bitte vorher engine anschauen !!)

      schon mal danke :)

      mfg
    • Du sendest einfach die Daten des Schusses (also, Start- und Endpunkt und die Geschwindigkeit) an den Server, der diese dann an die anderen Clienten sendet. Das einzige Problem, was dann noch besteht, ist, dass der Schuss bei allen Spielern gleichzeitig losgeht. Doch dies ist ein anderes Thema und wurde schon oft durchgekaut (siehe Online Synchronisation ).


      MfG flogy
    • Ich bins schon wieder mit einer Frage:
      Es geht um den Befehl

      GML-Quellcode

      1. setnagle(global.otherplayer,true)

      Ich hatte den Befehl bis jetzt immer bei Server und Client im Create Event meines Controll Objekts (Empfängt die Daten). Jetzt hab ich aber festgestellt das es durch diesen Befehl durchaus zu Schwierigkeiten kommen kann, was sich im Datenaustausch bemerkbar macht.
      Jetzt frag ich mich: Was mach ich falsch? Soll Client und Host den Befehl verwenden? Ist es vieleicht besser setnagle ganz weg zu lassen? Wann soll ich den Befehl aufrufen und in was für einem Event? ?(
    • Also ich kenne mich zwar nicht mit der speziellen Funktion der 39DLL aus, aber ich bin mir recht sicher, dass man damit den "Nagle-Algorithmus" ein-/ausschaltet. Laut Wikipedia werden damit also Daten nicht sofort geschickt, sondern erst nach einer Ansammlung von mehreren als Paket. Dadurch kann es zu Verzögerungen bei der Übertragung kommen, was man meistens bei einem Online-Spiel vermeiden will. Daher würde ich eher raten den Algorithmus auszuschalten, wenn man nicht übermäßig viele Daten senden will, die dafür aber schnell ankommen sollen. Der Vorteil des Nagle-Algorithmus ist die geringere Datenmenge die Insgesamt übertragen werden muss, da jedem Paket ein Header vorangeht.
    • @ Bl@ckSp@rk:
      Danke für die Erklärung! Ich weiß aber gerade wirklich nicht was besser ist, einmal ist es wesentlich besser den Befehl einzuschalten dann ist es wieder schlechter. Kommt mir so vor als käme es immer darauf an mit wem man gerade spielt. Ich weiß das es komisch klingt aber ich habe jetzt schon viel getestet und immer bekomm ich andere Ergebnisse.

      EDIT:
      Ich glaube ich weiß jetzt wie der Hase läuft ;)
      Wenn der Algorithmus von einer Person an ist werden ja immer nur dann Packete versendet wenn genug Daten zusammen kommen, deshalb kann es doch sein das ich eine freiere Leitung habe und dadurch die Packete vom Mitspieler besser empfangen kann. Deshalb kommt es mir so vor als würde das Spiel besser laufen. Mein Mitspieler empfängt dadurch allerdings weniger Packete was bei ihm zu Lags führt. Also:
      Besser aus lassen. Berichtigt mich wenn das nicht der Fall sein kann.

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

    • Ich wollt mal fragen, ob es möglich ist, bei ~4 Spielern die Verbindung dennoch Client-Client basiert zu machen.

      Das würde für den Host einiges an Traffic sparen oder?
      So far, Schattenphoenix~
      _____________________________________________________________________________
      "Who needs a stairway to heaven...
      If there is an elevator to hell... ?
      "
      - Vergessen
      "Auch ein perfektes Chaos ist etwas vollkommenes."
      - Jean Genet
    • Das Problem ist einfach, dass wenn alle Clients untereinander Connected sind habt ihr unglaubliche Probleme mit der Synchronisation.
      Es sieht dann nämlich jeder Spieler etwas anderes, weil die Datenpakete unterschiedlich schnell bei jedem ankommen. Jeder braucht eine dicke Leitung. Wenn einer Client zu einem der 3 anderen Clienten keine Verbindung mehr hat, wie wird das gehandhabt. Allgemein, wie werden Gegner gehandhabt, Spielmchanismen etc.?

      Ein Host ist bei manchen Sachen unabdingbar.

      Ihr müsst euch zu einem Host-Client System mal mehr Gedanken machen statt drauf loszuprogrammieren. Wenn ihr euch erst bis ins kleine überlegt wie so ein System funktioniert, dann ist das Programmieren viel, viel einfacher.
      Ich möchte euch jetzt nicht zu UML-Diagrammen/PAP oder sowas bringen, geschweige Struktrogramme und so ein kram.
      Aber wenn man sich erst auf einem Zettel mal die Wege der Kommunitkation aufschreibt, wer verwaltet was etc. hat man einen besseren Überblick.
    • Ich hab mir das jetzt auch nochmal angeschaut und wenn es komplett clientbasiert wäre, würden alle den Traffic des Hosts haben, da jeder zu 3 Leuten senden, bestätigung kriegen und dann wieder bestätigung schicken muss.

      Spart somit kein Traffic, wie ich es dachte.

      Der Vorteil beim Server-Client System scheint zu sein, dass man den ganzen Traffic fast komplett auf einen PC legen kann und somit diese Aufgabe dem (falls bekannt) mit der besten Leitung zuschieben kann... aber naja, das mit dem Server-Client is nich viel schwerer, die Frage war nur obs möglich ist, und ob es Vorteile hätte.

      Frage geklärt, ich werd mich an das mit dem Server setzen, mit na simplen Schleifen und nem Array dürfte es ja nicht so schwer sein.
      So far, Schattenphoenix~
      _____________________________________________________________________________
      "Who needs a stairway to heaven...
      If there is an elevator to hell... ?
      "
      - Vergessen
      "Auch ein perfektes Chaos ist etwas vollkommenes."
      - Jean Genet
    • Wär nett, wenn du den Fehler hier posten würdest...
      In meiner psychisch soziologischen Konstellation, manifestiert sich die absolute Dominanz positiver Impressionen meines Individuums.
      Kurz: Ich bin geil!

    • Kann man das mit der IP-Adresse eingeben nicht einfach irgendwie umgehen?
      Am liebsten hätte ich es so, dass wenn man ein Spiel erstellt, dann in den Warteraum kommt, und wenn man "joinen" will, eine Liste von Spielen bekommt, die erstellt wurden (und wo der Ersteller gerade wartet) und man dann nur auf den Eintrag klicken muss, und man im Spiel ist.

      Klingt wahrscheinlich viel einfacher, als es ist, oder?
    • @Basti:
      Es ist wirklich nicht sehr einfach sowas zu realisieren, allerdings hat Bl@ckSp@rk für genau sowas mal eine dll gemacht die sehr einfach zu benutzen ist, alles was du dafür brauchst ist etwas PHP fahigen Webspace.
      Klick
    • Problem mit y

      Ich hab folgendes problem:

      und zwar habe ich alles perfekt hinbekommen mit der verbindung zu einem anderen spieler.

      Nur beim gehn meines helden habe ich ein problem.
      Das mit x, dass er um 2 weiter geht funktioniert nach links und rechts, nun habe ich aber das problem das es mit dem rauf und abgehn nicht funktioniert.
      Könnte mir vl jemand biite ein beispiel wo man nach links, rechts, oben und unten gehn kann schicken.

      MFG
      GP