Thread lenta em alguns pcs, e rápida em outros

3 respostas
brunocia2000

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

3 Respostas

ViniGodoy

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.

brunocia2000

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

ViniGodoy

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? :wink:

Criado 29 de dezembro de 2006
Ultima resposta 5 de jan. de 2007
Respostas 3
Participantes 2