Conectividad y datos múltiples para enviar a lo largo del path

Estoy desarrollando un juego de plataforma tratando de hacerlo también para multijugador utilizando la conectividad IOS Multipeer. Estoy atrapado / confundido / no sé cuál es la mejor manera de enviar posts entre compañeros (en su mayoría, como 4 compañeros en el juego). El estilo del juego es como una carrera divertida y tengo 4 héroes corriendo y disparándose unos a otros y cosas así. ¡La cosa es que mantener las posiciones de los otros jugadores me está volviendo loco! A veces, otros jugadores se colocan en la position incorrecta (teniendo en count que todos los dispositivos tienen el mismo tamaño de pantalla). Es por el retraso de la conectividad. ¿Cuánta información puedo enviar por segundo y cuál es la mejor manera de administrar la transferencia de datos?

Cualquier idea / pensamientos son apreciados.

El performance de MPC depende principalmente de la connection. Lo que he visto como el mayor problema de performance es cuando uno de los compañeros tiene WiFi desactivado. Esto obliga a MPC a comunicarse a través del bluetooth, que es increíblemente lento. Lo he visto funcionar 20 veces más lento que MPC en Wifi.

No necesita estar conectado a una networking Wi-Fi. Simplemente habilite WiFi en todos los dispositivos y iOS aprovechará networkinges WiFi compartidas o creará su propia networking ad hoc.

La segunda cosa que quiere asegurarse es que sus compañeros no se inviten entre sí. Solo puede tener un invitador en su networking. Cuando varios compañeros invitan y aceptan conexiones, la networking MPC se vuelve inestable.

La tercera cosa es sendData:(NSData *)data toPeers:(NSArray *)peerIDs withMode:(MCSessionSendDataMode)mode error:(NSError **)error . Si está transmitiendo sus packages a todos los pares en el toPeers: el modo AND de la matriz es MCSessionSendDataReliable, entonces MPC espera hasta que todos los pares conectados ACK el post antes de pasar al siguiente package.

ACTUALIZACIÓN: hice algunas testings con mi propia aplicación y sobre Wi-Fi y dos dispositivos que puedo poner a aproximadamente 100 kbps. Estoy usando un iPhone 6 Plus y un iPhone 5S.

ACTUALIZACIÓN 2: Pensando más en su pregunta, hay algunas cosas que debe tener en count con las comunicaciones de MPC:

  • Haga todas sus llamadas a sendData y didReceiveData en un hilo de background y haga que ese hilo actualice sus datos de position en su model. Dile a tu viewController que las actualizaciones están disponibles con un método delegado o una notificación.

  • Mantenga sus packages de datos pequeños, pero diseñelos para que una actualización recibida represente el estado actual de su reproductor. Esto le permite perder una actualización y no estar completamente desincronizado: "enviar el jugador 1 se movió a (10, 10)" en lugar de "el jugador 1 movido por (1, -1)"

  • Numere sus packages y use MCSessionSendDataUnreliable. Si recibe un package con un número anterior al que procesó, tírelo. Si sigue la segunda guía anterior, no necesitará este package.

Si sigues las sugerencias de Dan Loughney, creo que tu mejor apuesta en la debugging es registrar las coorderadas recibidas de los otros jugadores. Eso debería ayudarlo a identificar si el problema se debe a problemas de time, datos malinterpretados u otra cosa.