[Java]Mudando de telas/cenários Hitskin_logo Hitskin.com

Isto é uma pré-visualização de um tema em Hitskin.com
Instalar o temaVoltar para a ficha do tema

Aldeia RPG
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

[Java]Mudando de telas/cenários

Ir para baixo

 [Java]Mudando de telas/cenários Empty [Java]Mudando de telas/cenários

Mensagem por CDZ Sáb Abr 13, 2019 2:26 am

Tipo: Tutorial
Nível: Intermediário.
Linguagem: java.
Contato e mais informações:  https://lucasindiesh1p.wordpress.com/ 
Mais tutorais sobre:  https://lucasindiesh1p.wordpress.com/2019/04/13/javamudando-de-telas-cenarios/


Os games atuais normalmente são organizados em telas, por exemplo: tela inicial (novo jogo, carregar jogo salvo, sair do jogo), e cada opção leva o usuário para outras telas (por exemplo:  tela do mapa inicial do personagem do jogador, tela do mapa inicial da casa de um personagem), essas telas são ambientes, ou seja, cenários organizados pelo programador de forma que o usuário possa navegar entre elas. 


De forma simples, não necessariamente precisa-se criar uma classe para cada cenário, basta criar uma uma estrutura de variáveis que possibilite o cenário se reconstruir conforme as condições dadas pelo programador sejam atendidas durante a interação do usuário.


Por exemplo:
 
game> executa o cenário> o responsável por desenhar os objetos no cenário é o paint() ou o paintComponent()> Se o usuario apertar tecla x ENTÃO o cenário modifica a variável booleana Cenario2 para que seja então desenhado o cenário do menu, e desativa a variável booleana do Cenário1 assim o que ela desenha não será mais desenhado.




Ou seja:


Por exemplo, criando a variavel que controlará se o cenário está ativo ou não na classe que executa o game:

Código:
.
.
.
private boolean cenario1;
.
.
.

em seguida:



Dentro do construtor da classe que é anexada ao frame e executada pelo main, pode-se inicializar as variáveis cenário1, 2,3,etc...
Código:
public NomeDaClasse(){
.
.
.
cenario1 = true;
.
.
.

}



Dentro do paint() ou do paintComponent() (o que você estiver usando para desenhar os objetos do cenário):

Código:
public void paint(Graphics g){
//cenário padrão: uma tela preta, não está sendo manipulado por nenhuma variável, ou seja, estará sempre visivel

g.setColor(Color.BLACK);
g.fillRect(0, 0, getWidth(), getHeight());

//cenário1: é apenas uma mensagem (uma String) pedindo para o usuário apertar a tecla ENTER para iniciar o game
//No construtor definimos ela como true a variavel cenario1
//por isso será apresentada pelo usuario por padrão, mas ao apertar ENTER, ela se transformara em FALSE
//portanto não vai ser mais desenhada no próximo repaint() do loop.        
         if(cenario1 == true){
g.setFont(new Font("Times new Roman", Font.BOLD, 20));
g.drawString("Novo Jogo (aperte enter para começar)", 50, 150);
}

if(cenario1 == false){
//..aqui é o que vai ocorrer quando o usuario apertar enter, podemos desenhar outras coisas aqui e
//ate mesmo fazer uma outra condição para Desenhar ou NÃO de acordo com uma variavel cenario2 por exemplo.
g.setFont(new Font("Times new Roman", Font.BOLD, 20));
g.drawString("cena2", 50, 150);
}


e então definindo como o usuario vai conseguir ativar e desativar essa variável, por exemplo, apertando ENTER desativar e ativar novamente:
Código:
@Override
public void keyPressed(KeyEvent e) {
int c = e.getKeyCode();
 if(c == KeyEvent.VK_ENTER){
             if(cenario1 == true)
                 cenario1 = false;
             else
                 cenario1 = true;
         }

}


E então, ao começar a criar muitos cenários, pode-se criar por exemplo uma lista e manipular o indice com valor booleano, ao inves de criar várias variáveis(cenario1, cenario2, cenario3...)

Referências:
https://docs.oracle.com/javase/7/docs/api/java/awt/event/KeyEvent.html
https://gamedev.stackexchange.com/questions/86580/dealing-with-multiple-scenes-levels
CDZ
CDZ
Novato
Novato

Mensagens : 22
Créditos : 0

Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos