sincronização em jogos multiplayer

olá.

estou programando a parte de rede de um jogo multiplayer.
Estou usando threads, mas estou com um problema na hora de sincronizar os movimentos.Tipo …eu movimento um player e ele se movimenta nos outros clientes mas com um delay que eu não posso deixar.

No servidor eu tenho uma classe só pra recibemento de msg , pensei em dar um sleep sempre que chegar uma msg ai vai dar tempo de processar nos outros clientes a ação… mas não funcionou…

sei que não expliquei muito bem…mas o problema em si é sincronizar os movimentos dos players…

desde já agradeço a atenção…

fui…

Daniel

Cara,
seus metodos estão declarados com synchronized ???

cara…os métodos que tratam do envio e recebimento de mensagens não estão como synchronized mas esta técnica é quando estou usando recursos compartilhados com por exemplo um arranjo ou coisa parecida não??..

quando cliente se conecta passo a ter threads individuais para envio e recebimento de mensagens …ou seja cada cliente tem no servidor threads para rec e enviar msg p/ o mesmo.

mas vou testar sincronizando os métodos…

valeu mesmo…

Olá!

não sei como vc está fazendo. Mas tente tratar o teu player como um player remoto. Explicando:

Quando vc mecher o seu player não o mecha diretamente, mas sim envie uma msg para a rede em broadcast ou multicast, e assim que vc receber, vc verifica qual o player e o meche. Deu pra entender?
Assim vc assegura que todos vão funcionar igualmente, não precisa fazer um código para o seu player e outro para um player remoto, todos funcionarão com um mesmo código. A única coisa que vc não vai poder assegurar é qeu todos movimentem-se ao mesmo tempo, devido ao delay da rede, isso não tem como impedir :wink:

Será que deu pra entender?!

Abraços!

to tratando dessa maneira, mas achei que dava pra eliminar esse delay

ilusão minha, pois vai existir e dependendo da rede que estão rodando o jogo ele pode ficar ainda maior.A ideia que me passaram foi de criar um timer e corrigir na marra…vou tentar

valeu mesmo…mãos á obra que senão eu num formo…

Uma estratégia que os jogos interativos utilizam para minimizar esses artefatos é a seguinte:

  • Comandos de tempo real trafegam via UDP num pacote de tamanho mínimo;

  • Configurações e comandos mais complexos trafegam via HTTP;

Apenas como referência, pois talvez extrapole o escopo de um trabalho escolar, vale a pena também tentar liberar o poder de java.nio, evitando a criação de threads para atender as requisições. Um bom início seria o link http://www.onjava.com/pub/a/onjava/2004/09/01/nio.html?page=1.