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

Esqueci-me da senha

Últimos assuntos
» Problema ao entrar por uma porta e voltar por ela
por aminaro Seg 06 maio 2024, 10:08

» Alguém aqui já ganha dinheiro com seus games?
por theguitarmester Ter 30 Abr 2024, 11:43

» Colisões não funcionando
por theguitarmester Ter 30 Abr 2024, 10:16

» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Sex 26 Abr 2024, 16:45

» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18

» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30

» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07

» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45

» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51

» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31

» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11

» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39

» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21


Duvida sobre Else-if e Switch

5 participantes

Ir para baixo

Duvida sobre Else-if e Switch Empty Duvida sobre Else-if e Switch

Mensagem por DonutScore Seg 17 Mar 2014, 19:32

Pessoal, aprendi como usar o switch e fui criar meu menu, no codigo abaixo, sempre que eu selecionava a primeira opção, todas as outras abaixo dele eram executadas uma apos a outra.
Código:
if (keyboard_check_pressed(vk_enter))
    {
    var option;
    option = scr_menu_current(items,ind);
    switch (option)
        {
        case 0:
            room_goto(roo_start);
        case 1:
            show_message("teste");
        case 2:
            show_message("teste");
        case 3:
            show_message("teste");
        case 4:
            show_message("teste");
        case 5:
            show_message("teste");
        case 6:
            show_message("teste");
        case 7:
            show_message(ds_list_find_value(items,option));
        case 8:
            if (show_question("Tem certeza de que deseja sair?"))
                {
                game_end();
                }
        break;
        }
    }

Não entendo muito bem como funciona o switch alguém poderia me explicar? Resolvi mudando o codigo para else-if e eagora está normal, mas acredito que o switch era para funcionar no exemplo acima, enfim com o codigo abaixo não tem mais erro.
Código:
if (keyboard_check_pressed(vk_enter))
    {
    var option;
    option = scr_menu_current(items,ind);
   if option = 0
      {
      room_goto(roo_start);
      }
   else if option = 1
      {
      show_message("teste");
      }
   else if option = 2
      {
      show_message("teste");
      }
   else if option = 3
      {
      show_message("teste");
      }
   else if option = 4
      {
      show_message("teste");
      }
   else if option = 5
      {
      show_message("teste");
      }
   else if option = 6
      {
      show_message("teste");
      }
   else if option = 7
      {
      show_message(ds_list_find_value(items,option));
      }
   else if option = 8
      {
      if (show_question("Tem certeza de que deseja sair?"))
            {
            game_end();
            }
   }
    }

Obrigado  pig
DonutScore
DonutScore

Data de inscrição : 18/12/2013
Reputação : 6
Número de Mensagens : 177
Prêmios : Duvida sobre Else-if e Switch Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://donutscore.com

Ir para o topo Ir para baixo

Duvida sobre Else-if e Switch Empty Re: Duvida sobre Else-if e Switch

Mensagem por Mr. Kaleb Seg 17 Mar 2014, 19:38

Ahn... No fim de cada case, você tem que por um break.
Mr. Kaleb
Mr. Kaleb

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 07/09/2010
Reputação : 21
Número de Mensagens : 1400
Prêmios : Duvida sobre Else-if e Switch Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Duvida sobre Else-if e Switch Empty Re: Duvida sobre Else-if e Switch

Mensagem por PedroX Seg 17 Mar 2014, 20:25

O case é como o if e o break faz o papel do else. Só que switch é mais eficiente que if-else.

_________________


Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.

Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.

Aprenda a calcular a velocidade de suas animações


Entre para o Clube do Inglês:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : Duvida sobre Else-if e Switch Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

Duvida sobre Else-if e Switch Empty Re: Duvida sobre Else-if e Switch

Mensagem por Mr. Kaleb Seg 17 Mar 2014, 20:35

PedroX escreveu:O case é como o if e o break faz o papel do else. Só que switch é mais eficiente que if-else.

Só complementando, é mais eficiente para a execução, porque quando o switch checa a ação correta, ele para de checar o resto, já o if-else checa todo o programa. É isso mesmo? Só queria dar um adendo, se estiver errado, me corrijam
Mr. Kaleb
Mr. Kaleb

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 07/09/2010
Reputação : 21
Número de Mensagens : 1400
Prêmios : Duvida sobre Else-if e Switch Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

Duvida sobre Else-if e Switch Empty Re: Duvida sobre Else-if e Switch

Mensagem por Gabreel Seg 17 Mar 2014, 20:38

Mr. Kaleb escreveu:
PedroX escreveu:O case é como o if e o break faz o papel do else. Só que switch é mais eficiente que if-else.

Só complementando, é mais eficiente para a execução, porque quando o switch checa a ação correta, ele para de checar o resto, já o if-else checa todo o programa. É isso mesmo? Só queria dar um adendo, se estiver errado, me corrijam
Exato.
Gabreel
Gabreel

Data de inscrição : 02/10/2009
Reputação : 52
Número de Mensagens : 2232
Prêmios : Duvida sobre Else-if e Switch Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Plataformas :
  • Game Maker 8.0 ou 8.1
  • Game Maker Studio 1.4
  • Game Maker Studio 2.0
  • Javascript
  • Outros


Ir para o topo Ir para baixo

Duvida sobre Else-if e Switch Empty Re: Duvida sobre Else-if e Switch

Mensagem por DonutScore Seg 17 Mar 2014, 22:44

Obrigado a todos, agora sim entendi porque o código era executando até o final. (Coisas de iniciantes Smile
DonutScore
DonutScore

Data de inscrição : 18/12/2013
Reputação : 6
Número de Mensagens : 177
Prêmios : Duvida sobre Else-if e Switch Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://donutscore.com

Ir para o topo Ir para baixo

Duvida sobre Else-if e Switch Empty Re: Duvida sobre Else-if e Switch

Mensagem por Willy Seg 17 Mar 2014, 23:44

Gabreel escreveu:
Mr. Kaleb escreveu:
PedroX escreveu:O case é como o if e o break faz o papel do else. Só que switch é mais eficiente que if-else.

Só complementando, é mais eficiente para a execução, porque quando o switch checa a ação correta, ele para de checar o resto, já o if-else checa todo o programa. É isso mesmo? Só queria dar um adendo, se estiver errado, me corrijam
Exato.
Errado!
O if else não checa todas as condições. Por isso é importante fazer uma estruturação de checagem, desde a mais completa até a mais básica, por exemplo:


Código:
if (Var1=10 && Var2=20 && Var3=30){
//Ação
}else if (Var1=10 && Var2=20){
//Ação
}else if (Var1=10){
//Ação
}

Se as 3 condições forem atendidas, o primeiro "//Ação" é executado, se apenas 2 forem atendidas, o segundo é executado, se for apenas 1, o terceiro.
Entretanto, se eu fizer a mesma checagem de forma oposta:
Código:
if (Var1=10){
//Ação
}else if (Var1=10 && Var2=20){
//Ação
}else if (Var1=10 && Var2=20 && Var3=30){
Ação
}
Neste caso, mesmo que a terceira condição for verdadeira, apenas a primeira será executada.

Agora, em questão de desempenho, não que seja muito significativo, switch é mais rápido.
Willy
Willy

Games Ranking : Nota A

Notas recebidas : C + B + A + A
Data de inscrição : 08/06/2009
Reputação : 264
Número de Mensagens : 1890
Prêmios : Duvida sobre Else-if e Switch Empty

Medalhas x 0 Tutoriais x 2 Moedas x 0

Ouro x 2 Prata x 1 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://willy-gmbr.blogspot.com/

Ir para o topo Ir para baixo

Duvida sobre Else-if e Switch Empty Re: Duvida sobre Else-if e Switch

Mensagem por PedroX Ter 18 Mar 2014, 15:00

Só para complementar um pouco, já que todo mundo está fazendo isso:

Código:
if (a==1 && b==0)
{
// BOOM!
}

No GM:8 e em versões antigas do GM:S, acontecia o seguinte:

http://www.yoyogames.com/tech_blog/52 escreveu:Now, previously when using GameMaker: Studio, that “if” would evaluate both parts, checking the value of val1 (a) and val2 (b), even if val1 (a) had evaluated as false. This is obviously not optimal, since sometimes you may want to evaluate several values, and those values could be derived from expensive functions etc... which will make them more costly to run.
Resumindo, o GM verificava a expressão inteira, para depois decidir se executava ou não o código. Com funções lentas, isso poderia deixar o jogo lento. Veja:

Código:
if (0>1 && draw_get_pixel(10, 10) == c_red)
{
// isso não vai ser executado
}

Como 0 não é maior que 1, o código não será executado. Mas a função draw_get_pixel (que é bem lenta) seria executada mesmo assim.

Por isso, é bom usar ifs sequencialmente.

Código:
if (0>1)
if (draw_get_pixel(10, 10) == c_red) //essa condição não será testada
{
// isso também não será executado
}

A diferença é que o GM vai ver que 0 não é maior que 1 e já vai parar por aí.

Agora o Short-circuit evaluation foi implementado. Ou seja, se você usar o GM:S, pode usar o && sem medo, porque a expressão deixa de ser interpretada logo no primeiro false retornado.
Duvida sobre Else-if e Switch ?name=General_Tab

_________________


Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.

Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.

Aprenda a calcular a velocidade de suas animações


Entre para o Clube do Inglês:
PedroX
PedroX

Games Ranking : Nota B

Notas recebidas : C+B
Data de inscrição : 26/07/2008
Reputação : 311
Número de Mensagens : 6087
Prêmios : Duvida sobre Else-if e Switch Empty

Medalhas x 0 Tutoriais x 17 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

https://web.whatsapp.com/send?phone=5519995935953&text=Pedro

Ir para o topo Ir para baixo

Duvida sobre Else-if e Switch Empty Re: Duvida sobre Else-if e Switch

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo


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