Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

Lista E Mais de 4 opções

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
Mestre_Ra
Novato
Novato
Reações: 0
Mensagens: 12

Lista E Mais de 4 opções

Mensagem por Mestre_Ra » Qui Set 01, 2016 6:45 pm

 Boa noite, espero que possam me ajudar em duas duvidas:
 Uma como faço uma lista, exemplo daqueles que você vê em RPGs quando você vai para uma loja, e possui o nome, valor, descrição e uma imagem do item?
E como faço para ter mais de 4 opções, já usei o show_message_ext, mas só pode ter 3 opções, e no meu caso vou usar 5 opções.

Avatar do usuário
Denis Lemos
Membro
Membro
Reações: 0
Mensagens: 49

Re: Lista E Mais de 4 opções

Mensagem por Denis Lemos » Qui Set 01, 2016 7:31 pm

Como você mesmo já escreveu, você deve aprender a usar "Ds List" ou "array 2D" para guardar as informações dos itens.

Vou dar um pequeno exemplo usando array 2D onde o índice "a" é o número do item guardado na array, e o índice "b" é apropriedade do item:

Código: Selecionar todos

//item[a,b]
//Em (a)     É a localização do item na array.
//Em (b = 0) É guardado o nome do item.
//Em (b = 1) É guardado o valor do item.
//Em (b = 2) É guardado a imagem do item. Nesse caso para facilitar será uma sprite, mas pode ser apenas a sub imagem de uma sprite.

item[] = -1; //Declarando a array que vai guardar os itens e suas informações.

//Definindo os itens e seus atributos
item[0,0] = "Item 1"; //Define o nome do primeiro item(Note que é uma string).
item[0,1] = 100;      //Define o valor do primeiro item.
item[0,2] = spr_item1;//Define a sprite do primeiro item.

item[1,0] = "Item 2"; //Define o nome do segundo item(Note que é uma string).
item[1,1] = 150;      //Define o valor do segundo item.
item[1,2] = spr_item2;//Define a sprite do segundo item.
Você pode guardar qualquer informação dentro da cada posição da array ou DS List. O Game Maker não faz distinção de tipos de variáveis, então cada posição pode ser de tipos diferentes.
Agora que você já tem seus itens e informações salvas. Você pode usar essas informações sempre que precisar.
Ex:

Código: Selecionar todos

if("apertou no item 1")
{
    dinheiro -= item[0,1];// Subtrai o valor do dinheiro disponível de acordo com o valor do item1.
}
Ou:

Código: Selecionar todos

if(dinheiro<item[2,1])//Se vc tem menos dinheiro do que o valor do item3
{
    show_message("Você não tem dinheiro suficiente para comprar este item!");
}
PS: Eu não entendi o lance sobre as 5 opções!

Avatar do usuário
Mestre_Ra
Novato
Novato
Reações: 0
Mensagens: 12

Re: Lista E Mais de 4 opções

Mensagem por Mestre_Ra » Qui Set 01, 2016 9:16 pm

Era isso que estava tentando me lembrar, array, já tinha lido sobre isso, mas tinha me esquecido. O que eu queria disser das 5 opções é a seguinte:
Sabe quando usamos show_message_ext, podemos criar até 3 opções para serem escolhidas no jogo, vamos usar um exemplo:
O jogador vai em uma loga, vai falar com o vendedor e ele te dará 3 opções, comprar, vender e sair.
No meu caso usa esse comando não é suficiente, pois eu quero acrescentar mais duas opções, outro exemplo:
O jogador poderia escolher se ele que ir para o sul, norte, leste, oeste ou sair.
Agora percebi que posso usar arrays para criar as opções, se puder me ajudar como faço para clicar com o mouse nos nomes das opções, e fazer com que a opção sair feche as opções.

Avatar do usuário
Eduardo Macedo
Programador
Programador
Reações: 0
Mensagens: 31

Re: Lista E Mais de 4 opções

Mensagem por Eduardo Macedo » Sáb Set 03, 2016 2:59 pm

A forma mais fácil seria usar um objeto para cada botão de ação, mas também da pra usar o point_in_rectangle enquadrando o retângulo em volta do texto.

Avatar do usuário
Mestre_Ra
Novato
Novato
Reações: 0
Mensagens: 12

Re: Lista E Mais de 4 opções

Mensagem por Mestre_Ra » Sáb Set 03, 2016 5:03 pm

Essa parte não conheço,poderia me ensinar, se não for pedir muito.

Avatar do usuário
Denis Lemos
Membro
Membro
Reações: 0
Mensagens: 49

Re: Lista E Mais de 4 opções

Mensagem por Denis Lemos » Sáb Set 03, 2016 8:03 pm

O que o Eduardo quis dizer é que em vez de usar o show_message() para aparecer as opções, seria melhor você usar objetos ou verificar se o mouse está em cima de determinada opção usando o comando point_in_rectangle().

Eu particularmente acharia meio feio na hora do jogo aparecer a janela popup do Windows, por isso acho melhor você fazer a sua própria janela de opções que vai ficar dentro do próprio jogo e da forma que você definir.

Então explicando a maneira mais simples de fazer que o Eduardo disse...
No momento em que você faz a mensagem aparecer, em vez disso seria melhor você criar 5 objetos que serão os botões das opções. E um obj_optionsPai, que não precisa conter nada, será só para verificar o click do mouse apenas uma vez, caso contrário teria que verificar o click do mouse 5 vezes, uma vez para cada opção, e isso tornaria o código bem mais complicado de fazer. Então é necessário tornar o obj_optionsPai como pai de todos os outros objetos opções. Basta abrir cada "objeto opção" e selecionar em "Parent" o nosso obj_optionsPai. Dessa forma nós verificamos apenas o click do mouse sobre o obj_optionsPai, que também vai valer para todos os seus objetos filhos, no caso os botões das opções.

Agora vamos aos códigos!
Antes de criar as instâncias dos botões de opção no jogo, declare no Evento Create uma variável para cada opção e outra para saber se as opções foram criadas:

Código: Selecionar todos

show_options = false;
option1 = noone;
option2 = noone;
option3 = noone;
option4 = noone;
option5 = noone;
Depois disso já podemos criar os botões de opções, vamos aproveitar e colocar os códigos que criam os botões das opções no "mesmo lugar" que você fez para aparecer a mensagem com as opções.
Um exemplo de código bem simples que cria e salva as opções dentro de uma variável id para ser usado depois:

Código: Selecionar todos

//No evento que mostra as opções.
option1  = instance_create(x-64, y, obj_option1);
option2  = instance_create(x-32, y, obj_option2);
option3  = instance_create(x, y, obj_option3);
option4  = instance_create(x+32, y, obj_option4);
option5  = instance_create(x+64, y, obj_option5);
show_options = true;//As opções foram criadas.
Agora você já tem os botões criados, basta fazer a verificação se algumas das opções foi selecionada(clicada pelo mouse):
Vamos criar uma verificação do click do mouse no Evento Step para ser checada constantemente, fora da região do resto do código.

Código: Selecionar todos

if(mouse_check_button_pressed(mb_left))//Se apertou o botão do mouse.
{
    if(show_options)//Se as opções já foram criadas.
    {
        var option_selected = instance_place(mouse_x, mouse_y, obj_optionsPai);//Verifica se o mouse está sobre alguma das opções e guarda o id da opção.
        if(option_selected)//Se rotarnar verdadeiro, então o mouse está em cima de uma das opções.
        {
            switch (option_selected)//Pega o id da opção clicada para comparação.
            {
              case option1://Caso o id seja o mesmo da instância da opção 1.
              //Coloque o seu código se a opção 1 for escolhida aqui.
              break;


              case option2://Caso o id seja o mesmo da instância da opção 2.
              //Coloque o seu código se a opção 2 for escolhida aqui.
              break;


              case option3://Caso o id seja o mesmo da instância da opção 3.
              //Coloque o seu código se a opção 3 for escolhida aqui.
              break;


              case option4://Caso o id seja o mesmo da instância da opção 4.
              //Coloque o seu código se a opção 4 for escolhida aqui.
              break;


              case option5://Caso o id seja o mesmo da instância da opção 5.
              //Coloque o seu código se a opção 5 for escolhida aqui.
              break;
            }
            with(option1)instance_destroy();//Destrói o botão da opção 1.
            with(option2)instance_destroy();//Destrói o botão da opção 2.
            with(option3)instance_destroy();//Destrói o botão da opção 3.
            with(option4)instance_destroy();//Destrói o botão da opção 4.
            with(option5)instance_destroy();//Destrói o botão da opção 5.
            show_options = false;//Informar que uma opção já foi escolhida.

        }

    }
}
Eu não testei aqui se funciona, pois fiz tudo agora de cabeça, mas pela lógica deve funcionar. Você também pode implementar e melhorar colocando um fundo ou desenhando um quadrado atrás para ficar mais bonitinho.

Avatar do usuário
Mestre_Ra
Novato
Novato
Reações: 0
Mensagens: 12

Re: Lista E Mais de 4 opções

Mensagem por Mestre_Ra » Dom Set 04, 2016 6:25 am

Muito obrigado. Me ajudaram muito.

Trancado

Quem está online

Usuários navegando neste fórum: Ahrefs [Bot] e 0 visitante