Multipeer Connectivity und Daten, die auf dem Weg gesendet werden

8

Ich entwickle ein Plattform-Spiel, das versucht, es auch für Multiplayer mit der IOS Multipeer-Konnektivität zu machen. Ich bin fest / verwirrt / weiß nicht, was der beste Weg ist, um Nachrichten zwischen Kollegen (meist wie 4 Peers im Spiel) zu senden. Der Spielstil ist wie ein Spaßlauf und ich habe 4 Helden, die rennen und schießen und so weiter. Die Sache ist, dass das Halten der Positionen der anderen Spieler mich verrückt macht !! Manchmal sind andere Spieler in der falschen Position (unter Berücksichtigung aller Geräte mit der gleichen Bildschirmgröße). Liegt das an der Verzögerung der Konnektivität? Wie viele Informationen kann ich pro Sekunde senden und was ist der beste Weg, um die Datenübertragung zu verwalten?

Jede Idee / Gedanken werden geschätzt.

    
alazmi95 09.08.2015, 20:40
quelle

2 Antworten

4

Der Durchsatz von MPC hängt hauptsächlich von der Verbindung ab. Was ich als das größte Leistungsproblem gesehen habe, ist, wenn einer der Peers WLAN deaktiviert hat. Dies zwingt MPC, über Bluetooth zu kommunizieren, was unglaublich langsam ist. Ich habe es 20 mal langsamer als MPC über Wifi laufen gesehen.

Sie müssen nicht mit einem WLAN-Netzwerk verbunden sein. Aktivieren Sie einfach WiFi auf allen Geräten und iOS nutzt gemeinsam genutzte WLAN-Netzwerke oder erstellt ein eigenes Ad-hoc-Netzwerk.

Das zweite, was Sie sicherstellen wollen, ist, dass Ihre Kollegen sich nicht gegenseitig einladen. Sie können nur einen Inviter in Ihrem Netzwerk haben. Wenn mehrere Peers Verbindungen einladen und akzeptieren, wird das MPC-Netzwerk instabil.

Drittes Ding ist sendData:(NSData *)data toPeers:(NSArray *)peerIDs withMode:(MCSessionSendDataMode)mode error:(NSError **)error . Wenn Sie Ihre Pakete an alle Peers in den toPeers senden: Array AND-Modus ist MCSessionSendDataReliable dann MPC wartet, bis alle verbundenen Peers die Nachricht ACK, bevor Sie mit dem nächsten Paket weitermachen.

UPDATE: Ich habe ein paar Tests mit meiner eigenen App gemacht und über WiFi und zwei Geräte kann ich ungefähr 100kbps stellen. Ich benutze ein iPhone 6 Plus und ein iPhone 5S.

UPDATE 2: Wenn Sie mehr über Ihre Frage nachdenken, müssen Sie bei MPC communications ein paar Dinge beachten:

  • Führen Sie alle Ihre sendData- und didReceiveData-Aufrufe in einem Hintergrundthread aus, und lassen Sie diesen Thread Ihre Positionsdaten in Ihrem Modell aktualisieren. Informieren Sie Ihren viewController, dass Updates mit einer Delegatenmethode oder einer Benachrichtigung verfügbar sind.

  • Halten Sie Ihre Datenpakete klein, aber gestalten Sie sie so, dass ein empfangenes Update den aktuellen Status Ihres Players darstellt. Dies ermöglicht es Ihnen, ein Update zu verpassen und nicht völlig synchron zu sein - "Spieler 1 wurde nach (10, 10) verschoben" anstatt "Spieler 1 nach (1, -1)" verschoben)

  • Nummerieren Sie Ihre Pakete und verwenden Sie MCSessionSendDataUnreliable. Wenn Sie ein Paket mit einer früheren Nummer erhalten als die letzte, die Sie verarbeitet haben, werfen Sie es weg. Wenn Sie der zweiten obigen Richtlinie folgen, benötigen Sie dieses Paket nicht.

Dan Loughney 14.08.2015, 17:56
quelle
2

Wenn Sie den Vorschlägen von Dan Loughney folgen, denke ich, dass Ihre beste Wette beim Debuggen ist, die empfangenen Koordinaten von den anderen Spielern zu protokollieren. Das sollte Ihnen helfen zu erkennen, ob das Problem auf Timing-Problemen, falsch interpretierten Daten oder etwas anderem beruht.

    
Morten Mortensen 18.08.2015 20:08
quelle