[Problema] Como melhorar a jogabilidade? Tecnicas?

4 respostas
ricoldi

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&lt;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.

4 Respostas

raffaele

Para poder pressionar mais de uma tecla ao mesmo tempo você pode utilizar threads

Thread t = new Thread() {
...
}
ricoldi

Acho que não é bem o caso…

Mas tente explicar melhor o porque…

Agradeço raffaele,

Att
Ricoldi

M

ricoldi:
Acho que não é bem o caso…

Mas tente explicar melhor o porque…

Agradeço raffaele,

Att
Ricoldi

Não dá uma egasgada por causa da taxa de repetição do teclado não? Que nem quando vc segura uma letra no word e aparece só uma letra e demora alguns segundos pra digitar a sequencia?

ricoldi

Não creio que seja este o problema, porque eu seto que ela vai mover quando chama o keyPressed() e libero a barra quando chama o keyReleased(); ou seja ela não move de acordo com a quantidade de vezes que eu pressiono. Então não interessa a taxa de repetição.

Agradeço a ajuda mfvwvfm

Att
Ricoldi

Criado 6 de agosto de 2008
Ultima resposta 6 de ago. de 2008
Respostas 4
Participantes 3