Suporte no desenvolvimento de jogos


    [Java]Opção e seleção de escolha de menu, para jogos 2D

    CDZ
    CDZ
    Novato
    Novato

    Mensagens : 22
    Créditos : 0
    Cash : 0

    [Java]Opção e seleção de escolha de menu, para jogos 2D Empty [Java]Opção e seleção de escolha de menu, para jogos 2D

    Mensagem por CDZ em Seg Maio 13, 2019 9:02 pm

    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/05/13/javaopcao-e-selecao-de-escolha-de-menu-para-jogos-2d/  
     
    Sumário:
    1º- Primeiro planeje a forma visual do menu;
    2º- Como será a forma visual do seletor da opção;
    3º- Crie as condições de controle do seletor da opção.
     
    Conteúdo:
     
    1º: Decidido quantas opções o menu vai ter, e como o visual dele é apresentado? (por imagens, ou apenas strings, formas geométricas etc?).
     
    Por exemplo, desenhando Strings para representar um menu com 2 opções (Entrar e sair):
    Dentro do método  responsável pelo desenho do menu:
     

    Código:
    ...
    g.setFont(new Font("Times new Roman", Font.BOLD, 20));
    g.drawString("Entrar", 50, 150);
    g.drawString("Sair", 50, 175); 
    ...
     


    2º: Decidido como vai ser a forma visual do seletor do item do menu no seu game.
    exemplo:
    Uma esfera azul ficará ao lado esquerdo da opção que o usuário deseja.
    Declaramos uma variável que substituirá a coordenada y do seletor, para que o usuário possa controlar o seletor. E a inicializamos dentro do construtor:
     

    Código:
    ...
    private int coord_seletor_y;
    ...
    public NomeDoConstrutorDaClasse{
     coord_seletor_y = 135; //o valor inicial de sua posição y.
    ...
    }
    ...



     
    Agora, no método responsável por desenhar o menu, desenhamos o seletor de itens do menu:
     

    Código:

    ...
    g.setColor(Color.blue); 

    g.fillOval(20, coord_seletor_y, 10, 10);

    ...
    Nota: coord_seletor_y, trata-se de uma variável privada, que inventamos ao declara-lá e inicializa-la no construtor, que conterá o valor da coordenada y do ponteito. Fazemos isso pois a coordenada y precisa ser manipulada pelo usuário (ela é a responsável posicionar o seletor, para cima ou para baixo). 
    Poderiamos fazer o mesmo com a coordenada x (no caso está 20, mas substituiríamos por uma variável privada), mas no exemplo desse conteúdo os itens serão listados com um fluxo topo-baixo apenas.
     
     
    3º -  Agora, vamos criar mais uma variável privada, item_n, esta variável será o que gera o "nexo" logico entre a esfera azul (seletor) e o item que o usuário quer selecionar. 
     

    Código:

    ...

    private int item_n;

    ...

    public NomeDoConstrutorDaClasse{

    ...
    item_n = 1; //vai começar ao lado da primeira posição do menu
    ...

    }

    ...

    Agora vamos configurar a mudança tanto do valor do item quanto da coordenada para que ocorra quando o usuário aperta as teclas W (a coordenada y vai levar a esfera azul para cima) ou S ( a coordenada y vai levar a esfera azul para baixo):
     

    Código:

    public void keyPressed(KeyEvent e) {
    int c = e.getKeyCode();
    ...

    if(c == KeyEvent.VK_W){
    coord_seletor_y-= 25;
    if(coord_seletor_y <= 135){
    coord_seletor_y = 135;
    item_n = 1;
    }
    else{
    item_n = 2;

    }

    }
    }
    if(c== KeyEvent.VK_S){
    coord_seletor_y+= 25;
    if(coord_seletor_y >= 160){
    coord_seletor_y= 160;
    item_n = 2;
    }
    else{
    item_n= 1;
    }
    }
    ...

    E então, graças a variável item_n, agora diferenciar as coisas que vão acontecer a depender do item selecionado, quando o usuário apertar a tecla ENTER, nesse exemplo:



    Código:
    public void keyPressed(KeyEvent e) {

    int c = e.getKeyCode();
    ...
    if(c == KeyEvent.VK_ENTER){
    if(item_n== 1){
    //novo jogo
    }
    if(item_n == 2){
    //Sair
    System.exit(0);
    }
    }

      Data/hora atual: Sex Maio 24, 2019 11:54 am