Galera, bom dia.
Estamos tentando construir um pequeno arkanoid para testar nossa capacidade e desenvolver técnicas de programação de jogos.
Estou lendo o Killer https://fivedots.coe.psu.ac.th/~ad/jg/, mas não achei nada sobre inputs, busquei aqui no fórum e no google, porem só acho para j2me.
Gostaria de uma ajuda sobre tempo de resposta nos inputs, a barra corre no eixo X <esquerda e direita> mas ela dá uma engasgada na hora de começar a correr e não sabemos porque!
Abaixo as classes e os métodos que tem a ver com o movimento da barra.
Aqui o código do laço principal:
public class Main extends JFrame{
while (_jogo.isAtiva()){
tempo_inicio = System.currentTimeMillis();
_jogo.preparar();
_jogo.executar(); //Aqui ele chama todos os executa de todos os objetos dentro da classe jogo, incluindo o executa() da classe Barra
Graphics2D tela = (Graphics2D) getBufferStrategy().getDrawGraphics();
tela.setFont(fonte);
tela.setColor(Color.WHITE);
_jogo.desenhar(tela);
delay = System.currentTimeMillis() - tempo_inicio;
if (delay<15)
delay = 15;
tela.drawString("Fps " + (1000/delay), 465, 45);
getBufferStrategy().show();
try{
if (_jogo.isAtiva())
Thread.sleep(delay);
}catch (InterruptedException e){}
}
}
Aqui o código da minha classe jogo:
public class JreakoutJogo extends Tela implements KeyListener {
public void executar() {
((Barra) objetos.getObjeto("BARRA")). executar(); //Chama o método executar() da classe Barra.
}
public void keyPressed(KeyEvent e) {
e.consume();
try{
Barra barra = (Barra) objetos.getObjeto("BARRA");
BolaRun bola = (BolaRun) objetos.getObjeto("BOLA");
if (!bola.movendo())
bola.mover();
if (e.getKeyCode() == TECLA_ESQUERDA) {
barra.setMove_X(-3);
} else if (e.getKeyCode() == TECLA_DIREITA) {
barra.setMove_X(3);
}
} catch (Exception err) {
parent.excecao(err);
}
}
}
public void keyReleased(KeyEvent e) {
e.consume();
try{
if ((e.getKeyCode() == TECLA_ESQUERDA)
|| (e.getKeyCode() == TECLA_DIREITA)) {
Barra barra = (Barra) objetos.getObjeto("BARRA");
barra.setMove_X(0);
}else if (e.getKeyCode() == KeyEvent.VK_ESCAPE){
}
}catch (Exception err) {
parent.excecao(err);
}
}
Aqui a minha classe Barra:
public class Barra extends Objeto{
private int move_x;
public void setMove_X(int _valor){
move_x = _valor;
}
public void executar() {
super.x += move_x; //super.x é a posição X na tela;
}
}
[i]
Eu preciso de uma luz para uma boa técnica de implementação de jogabilidade, de como se deve tratar isto, por exemplo um jogo que recebe mais de uma tecla por vez, como é que se trata varias teclas pressionadas ao mesmo tempo?
Qualquer bom link, boa técnica ou idéia?
[/i]
Agradeço
Ricoldi.