En un juego en red de dos jugadores, ¿cuál es una buena manera de determinar si algún evento ocurrió primero para un jugador u otro?

Hola
OK, supongamos que eres una nave espacial y recoges una bonificación flotante / mejora de arma.
A medida que chocas con la bonificación:
– desaparece
– observa que cree que puede haber ganado un bono en la ubicación x y la marca de tiempo t (o incluso tal vez el bono tiene un código de identificación)
– comienzas un proceso para obtener la confirmación del “juego”
(La mejora de bonificación / arma no se otorgará hasta que se confirme).

Ahora tenemos que considerar la arquitectura del juego.
– es de igual a igual
– ¿Hay un servidor con funcionalidad central para los participantes del juego?
– ¿Existe un mecanismo establecido por el cual los participantes del juego registran el tiempo? (Hora / hora global desde el inicio del juego / compensación del tiempo del jugador / etc.)

Supongamos que hay un servidor.
A menos que exista algún mecanismo por el cual el servidor intente ajustarse para los jugadores que tienen latencias de respuesta de red diferentes, suponga que simplemente otorga premios en función del “primer llegado, primero servido”.

En otras palabras, el jugador x reclama el bono y y los futuros reclamos sobre el bono y deben ser rechazados. El jugador x recibe la confirmación y comienza a encender su BFG9000 (léase: disfrutar del bono).

Elegí el escenario más fácil pero aún espero haber ofrecido una idea. Vale la pena señalar que no soy un programador de juegos, aunque una vez fundé un servicio de juegos en Internet.

Ahora, ¿John Carmack está en Quora?

Nunca se puede determinar esto exactamente. Einstein demostró esto cuando demostró que la comunicación instantánea a distancia es imposible.

Si está dispuesto a confiar en el informe de sus relojes de las computadoras individuales, puede determinar esto en función de una marca de tiempo. Pero no es posible sincronizar al 100% los relojes, siempre habrá deriva debido al punto uno anterior.

Puede intentar determinar esto ejecutando una simulación autoritativa en el servidor. Esto le da una vez lugar para compaginar estas cosas. La desventaja es que la idea del juego del servidor no será exactamente la misma que la vista de los jugadores, que también estarán separadas entre sí. La desconexión dependerá de la latencia entre los clientes y el servidor. Si no diseña para ello, también puede ser posible otorgar a los jugadores de ping bajo una ventaja injusta de esta manera.

SO, al final, todavía es imposible determinar de manera confiable el tiempo de una fracción de segundo en un juego en red. En cambio, todos los desarrolladores de juegos en red diseñan sus juegos en función de ese requisito.

Su pregunta no es específica, así que responderé por una variedad. Digamos que en tu juego puedes alojar y conectarte en el menú multijugador. Configuré una variable global como id. Entonces, si hace clic en host global.server = 1 global.client = 0. Y viceversa si eres un cliente. Y desde allí puedes enviar tu “I” con él o, dado que es solo un juego de 2 jugadores, simplemente deja que el código de tu servidor se encargue tal cual. Estoy fuera de un iPod, así que no puedo dar un buen ejemplo, pero lo intentaré.

CÓDIGO LATERAL DEL SERVIDOR
cuando reciba los clientes xy o cualquier variable, simplemente configure su objeto ficticio (el cliente de representación de objetos) para que haga lo mismo.

LADO DEL CLIENTE
Configura tu reproductor para enviar variables. El servidor enviará los vars de vuelta. Establecer vars ficticios igual también.

Ahora no puedo entrar en detalles porque estoy en un iPod y no sé con qué programa. Pero el resumen de lo que he dicho es que es un juego de 2 jugadores que su servidor puede asumir que es el otro jugador porque los servidores también son jugadores. Espero haberte ayudado. Pero mi primera respuesta lo siento si no lo hice.