Problemas com controle do tempo em games

3 respostas
B
Olá,  programo em java  algum tempo, mas  agora resolvi tentar aprender programação de games (2d). Consegui fazer alguns sem problemas, mas atualmente eu estou fazendo um space invaders  por diversão, e me deparei com um problema, que seria o controle de tempo de duração das explosões das naves, eu até tentei pausar a thread por 30 ms deixando a imagem da explosão antes do inimigo sumir, porém, obviamente, ocorre um atraso de 30ms no jogo inteiro, que na verdade é praticamente desprezível, mas ainda sim é perceptível. Eu gostaria de saber se tem como controlar isso sem ter que mexer na thread principal(que atualiza a tela). Eu  fiz explosões em outros jogos, porém eu simplesmente fiz um loop que atualizava os frames da explosão, porém nesse caso, a explosão é apenas uma imagem que eu gostaria de deixa-la em evidencia por mais de um frame.

Outro problema que eu tive relacionado a isso, mas consegui resolver (acho que não da maneira correta), é o movimento clássico das naves inimigas do space invaders (uma "simulação" de atualização de tela lenta). A minha solução foi criar uma variável (int counter) que aumenta cada vez que a tela geral atualiza, e uma condição: if (counter < 100) { código que faz os inimigos moverem para o lado... counter = 0}. Gostaria de saber se essa é a melhor solução, porque eu desconfio que  uma maneira de fazer com que os inimigos atualizem em um timer diferente do resto do jogo, e talvez se isso fosse possível, poderia resolver o 1º problema citado no tópico.

Obrigado pela atenção.

3 Respostas

xandelol

Posta o seu código ae…Eu não tenho experiência em programação de jogos em java, mas acho que o seu problema é com a lógica.

TerraSkilll

Sugiro a leitura desse artigo do pontov: http://www.pontov.com.br/site/index.php/java/48-java2d/121-o-loop-de-animacao. Deve te ajudar a criar o loop de controle do jogo.

Os demais artigos do Ponto V também devem te ajudar com outros pontos do jogo.

Abraço.

B

xandelol:
acho que não há a necessidade de postar o código aqui, o meu problema é +/- o que eu especifiquei, mas obrigado.

TerraSkilll:
Obrigado pelo link, mas apesar de eu ter gostado do site e de ter me ajudado em outra coisa não me ajudou no que eu preciso.
__
Acho que se existisse um comando do tipo: for (tantos milissegundos) {…} , me ajudaria muito, alguém conhece alguma coisa parecida com isso?

Criado 27 de março de 2013
Ultima resposta 27 de mar. de 2013
Respostas 3
Participantes 3