Pessoal, quando vou usar em meu applet uma thread, noto que em pcs com configuração mais avançada, a thread roda sem problema, ja pcs com a configuração baixa, a thread fica travando toda hora…
Abaixo mando o codigo fonte da Thread:
public void run()
{
while (vivo)
{
startTime = System.currentTimeMillis();
game_worker();
timeTaken = System.currentTimeMillis() - startTime;
SLEEP_TIME = 0L;
if (timeTaken < FRAME_TIME)
{
SLEEP_TIME = FRAME_TIME - timeTaken;
try
{
Thread.currentThread().sleep(SLEEP_TIME);
continue;
}
catch (InterruptedException e) { }
}
}
Alguem poderia me dizer como fazer a thread rodar sem travar em qualquer pc?
Abraços
Realmente, esse é um problema sério. As threads dependem muito do escalonador e seu comportamento não é multi-plataforma. Usar um timer mais preciso, como o System.nanoTime() ajuda.
Uma das maneiras, no caso de games, é você separar o update da lógica do jogo do update dos quadros do jogo. Você pode ler mais sobre isso no livro Killer Game Programming in Java, disponível no site do autor:
http://fivedots.coe.psu.ac.th/~ad/jg/
Eu mesmo já fiz a implementação sugerida no livro e o fonte está disponível num jogo estilo Arkanoid que fiz e pode ser baixado no GUJ:
http://www.guj.com.br/posts/list/48344.java
Eu implementei o GameLoop num projeto que chamei (por falta de um nome melhor) de Java Game Framework (JGF).
Para simplificar as coisas, separei os métodos importantes numa interface e deixei a lógica do GameLoop separada. Estude o livro que indiquei e dê uma olhada em como implementei essa interface que você não deve ter problemas.
Tanto o Vikanoid, quanto a JGF, foram implementados usando o Eclipse.
Brigado Vinicius, o código deu certo sim, a velocidade agora ficou normal no pc mais lento q tenho aqui.
Existem diversos jogos que tem esse problema né? De rodar mais rápido em um pc que no outro, como ragnarok, entre outros???
Abraços
Existem sim, o código do Killer Game Programming ajuda e minimizar isso, mas é impossível eliminar totalmente o problema.
Seria o paraíso dera se todos os nossos usuários tivesse máquinas rápidas, boas e eficientes e com a última versão do java instalado, certo? 