Pergunta

Eu fiz uma série de perguntas sobre J2ME jogo em desenvolvimento, e em um recente, Neil Coffey comentou

Como um lado issue-- Você realmente quer fazer 100 carrapatos / segundo em um jogo J2ME? Como eu acho que sb mencionou, você realmente deve também dormir para a próxima ponto de despertar desejado, não uma fixo duração de cada vez.

Por alguma razão, aquela coisa ficou na minha cabeça e agora eu quero as respostas, o que eu preciso fazer meu gameloop sono para o desejado ponto de wake-up , eu realmente não sei onde é que xD ponto (teoricamente falando).

Por uma questão de feedback, esta é uma versão simplificada da minha gameloop:

public void run() {
    Graphics g = this.getGraphics();
    while (running) {
        long diff = System.currentTimeMillis() - lastLoop;
        lastLoop = System.currentTimeMillis();
        input();
        this.level.doLogic();
        render(g, diff);
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            stop(e);
        }
    }
}

Obrigado por sua ajuda !!

Foi útil?

Solução

Se você decidir que você deseja processar cada 10 milissegundos, então você:

loop {
  - record current time; render
  - do input/logic
  - check the current time, and calculate elapsed time
    - if less than 10 ms has elapsed, calculate the remaining time (10 millis - elapsed time); sleep for this duration
}

Eu entendo que pode haver problemas com a resolução do temporizador (por exemplo, Thread.sleep (10) pode não dormir por exatamente 10 ms; e System.currentTimeMillis () não pode retornar resultados com granularidade até 1 ms). Esta é dependente de plataforma.

Outras dicas

Há um excelente artigo sobre jogo laços aqui , se você não leu já.

Da minha experiência escrevendo jogos J2ME, você vai querer minimizar o quanto você fazer qualquer coisa em um loop do jogo, como um loop do jogo mal escrito pode rapidamente drenar um telefones bateria insignificante. Ou seja, se você está tornando cada vez 10 milissegundos, certifique-se de verificar para ver se alguma coisa mudou, e se não, ignorá-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top