una pregunta, que seria mas factible al enviar paquetes, hacerlo cada X tiempo, enviando (poned por ej un juego tipo CS):
- Posicion (float x, float y, float z)
- Direccion (float x, float y, float z)
o algo ke no se si se usa en algun lao, ya que veo que podria ser muy malo XD
- cuando el usuario ace keydown(W), pues se envia eso, MSG_KEYDOWN_W y, cuando lo levante, MSG_KEYUP_W , asi si el tio va para alante, sin moverse durante 10 segs, solo se enviaran 2 mensajes. la direccion, como va con el ratón (si no fuese asi tb seria del mismo roio: juego de naves) pos seria igual ke en el otro.
ke pensais?
Es mejor la primera opcion, pero si estas pensando en hacer un juego donde la posicion del jugador es muy importante, envia tambien la velocidad de giro y la velocidad de avance, para así poder calcular donde estara el muñeco cunado llege la actualizacion a los otros usuarios dentro de, digamos, 1 o 2 segundos.
Ale.
osea, envio la velocidad de mov. y la pos. al server, y el calcula la posicion que será, y la envia, no ?
En realidad deberias tener una copia de los pasos de cada jugador en el servidor y en los clientes. Debido al lag tu no tendras en cada frame las posiciones actuales de todos los jugadores, luego tendras predecir los movimientos hasta q el servidor te mande los movimientos. Para eso debes tener la velocidad posicion y demas ;)
Recomiendo q te mires los fuentes del quake2 para ver como trabaja con red.
si ia no maclaro con algunos tutos como me vi a mirar el source del q2 XDDD
lo ke nesesito e un tuto desente ke diga como se ase y xq, no solo tye de codigo y tu c&p ..
Va, tio, echale un ojo, estoy seguro q todo el tiempo q pases mirando como va el codigo del quake sera tiempo aprovechado ;)
no hay ningun fichero/s donde esté todo el tema de red?
En general puedes mirarte las siguientes funiones:
Net_*
NetChan_*
CL_Frame
y SV_Frame
y en concreto
NET_ReadPackets
ke metodo usa el q2 pacer los paquetes? bloques de memoria a saco ? structs ? char*'s ?
creo q el struct es sizebuf_t y usa funciones MSG_* para escribir en el
Por cierto, para conexiones loopback no usa UDP, aunque si usa el mismo protocolo para enviar los datos.
Citar
o algo ke no se si se usa en algun lao, ya que veo que podria ser muy malo XD
- cuando el usuario ace keydown(W), pues se envia eso, MSG_KEYDOWN_W y, cuando lo levante, MSG_KEYUP_W , asi si el tio va para alante, sin moverse durante 10 segs, solo se enviaran 2 mensajes. la direccion, como va con el ratón (si no fuese asi tb seria del mismo roio: juego de naves) pos seria igual ke en el otro.
Has pensado que eso elimina toda "aleatoriedad" en el desarrollo del juego ? :)
¿que aleatoriedad?
si la gente es la que determina sus movimientos, no un random()..
Sí, pero tambien puedes tener una pequeña parte que sea aleatoria ! Ejemplo: cuando disparas en Counter-strike las balas no va EXACTAMENTE donde apuntas :) de la misma manera puedes hacer que ciertas cosas incorporen un factor aleatorio. Por ejemplo, si te estalla una granada a los pies puedes calcular la dirección en la que deberían saltar tus pedacitos, pero no es más espectacular si tus miembros se dispersan en varias direcciones ?
Colson: Creo que el segundo método que mencionas sí es utilizado(en esencia) en los juegos de estrategia.
Ejemplo: cuando mandas a tus 20 soldados atacar un punto, sería poco óptimo mandar 20 mensajes de posición de los soldados X veces por segundo. En lugar de ello se manda un mensaje con el comando(y sus parámetros) que has ordenado.
Estos mensajes deberían llegar SIEMPRE a su destino así que se puede usar TCP. Creo que este sistema es el que utilizan juegos como el Warcraft.
Luego, cada sistema será más o menos apropiado dependiendo del juego. Es como elegir entre UDP y TCP: depende....
PD:
Citar
Has pensado que eso elimina toda "aleatoriedad" en el desarrollo del juego ?
¿Qué tiene que ver la aleatoriedad con el sistema de mensajes a utilizar?¿No habeis pensado que el desvio aleatorio de la bala se puede calcular de forma local?
hombre, si se calcula de forma local, a cada uno le saldrá una cosa, ya que es algo aleatorio :
No esta mal planteado colson?
si ya envias la posicion y direccion a cada momento mejor mandas
POSICION
DIRECCION
ANIM (para q carge la acion q esta haciendo) si mandas el key down estaras mandando key down y se pone a cargar cosas inecesarias nu creeis?