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…
Cara,
seus metodos estão declarados com synchronized ???
D
dubongoPJ
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…
J
Juliano_CarnielPJ
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
Será que deu pra entender?!
Abraços!
D
dubongoPJ
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…
H
hipersoftPJ
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.