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.

Ajuda com switch e performance

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
MinnoP
Membro
Membro
Reações: 0
Mensagens: 25

Ajuda com switch e performance

Mensagem por MinnoP » Dom Out 23, 2016 1:54 am

Eai pessoal, beleza?
Estou com uma duvida em relação a switch junto com arquivos .ini
Vamos lá:
Fiz uma room de seleção de níveis, só uma esta desbloqueada e quando vai passando de fase outras de desbloqueiam, até ai meio óbvio, mas queria que as rooms que ja estives desbloqueadas continuassem desbloqueadas mesmo após o jogo ser fechado e reaberto, ok, consegui com arquivo .ini, fiz assim:
No create do obj_save: (não consigo mudar a cor da font :/ sorry)

Código: Selecionar todos

ini_open("SaveGame.ini") 
global.fases = ini_read_real("Fases","Fases",1);
ini_close()

 
Em seu Step:

Código: Selecionar todos

switch (global.fases) {

    case 2: global.nextroom[0] = true; break;
    case 3: global.nextroom[1] = true; break;
    case 4: global.nextroom[2] = true; break;
    case 5: global.nextroom[3] = true; break;
    case 6: global.nextroom[4] = true; break;
    case 7: global.nextroom[5] = true; break;
    case 8: global.nextroom[6] = true; break;
    case 9: global.nextroom[7] = true; break;
    case 10: global.nextroom[8] = true; break;
    case 11: global.nextroom[9] = true; break;
    case 12: global.nextroom[10] = true; break;

}
Na colisão do player com a porta de mudança de fase:

Código: Selecionar todos

if room = rm_01 {

    global.nextroom[0] = true;
    room_goto_next()
    ini_open("SaveGame.ini")
    ini_write_real("Fases","Fases",2)
    ini_close()
    
}
Fiz com todas as rooms
Agora o erro, quando, por exemplo, ele vai até a fase quatro e sai do jogo, quando entra só a fase 1(padrão) e a quatro(ultima) que estão abertas, as anteriores continuam fechadas
Eu descobri que o erro esta em "global.fases" onde eu armazenei o numero que destrava as fases, eu pensei em fazer um "IF/ELSE" para cada caso ao inves de usar o switch que me impede isso, mas isso estão certo? Pesaria muito o jogo, ou tem outra maneira?
Grato

Avatar do usuário
Zero
Novato
Novato
Reações: 0
Mensagens: 19

Re: Ajuda com switch e performance

Mensagem por Zero » Dom Out 23, 2016 4:02 am

Isso ocorre pq vc usa uma variavel pra dizr a fase desbloqueada, como global.fases por ultimo era a 4, quando voltar vai ter apenas a fase 4 liberada (ja que a um sempre esta liberada, ele n precisa de condição para estar liberada). Neste caso vc não poderá usar switch, pq switch não faz comparações, terá que fazer uma cadeia de ifs msm. Fica'ra mais ou menos assim :

Código: Selecionar todos

if global.fases >= 2 {global.nextroom[0] = true; break;}
if global.fases >= 3 {global.nextroom[1] = true; break;}
if global.fases >= 4 {global.nextroom[2] = true; break;}
if global.fases >= 5 {global.nextroom[3] = true; break;}
if global.fases >= 6 {global.nextroom[4] = true; break;}
if global.fases >= 7 {global.nextroom[5] = true; break;}
if global.fases >= 8 {global.nextroom[6] = true; break;}
if global.fases >= 9 {global.nextroom[7] = true; break;}
if global.fases >= 10 {global.nextroom[8] = true; break;}
if global.fases >= 11 {global.nextroom[9] = true; break;}
if global.fases >= 12 {global.nextroom[10] = true; break;}

Avatar do usuário
MinnoP
Membro
Membro
Reações: 0
Mensagens: 25

Re: Ajuda com switch e performance

Mensagem por MinnoP » Dom Out 23, 2016 4:11 pm

Muito obrigado Zero, tive que fazer isso mesmo hehe

Avatar do usuário
gabrielsch
Colaborador
Colaborador
Reações: 0
Mensagens: 234

Re: Ajuda com switch e performance

Mensagem por gabrielsch » Dom Out 23, 2016 4:27 pm

Utilize um laço de repetição para desbloquear as fases:
for (var i = 0; i < global.fases; i ++)
{
    global.nextroom[i] = true
}
Imagem

Avatar do usuário
MinnoP
Membro
Membro
Reações: 0
Mensagens: 25

Re: Ajuda com switch e performance

Mensagem por MinnoP » Ter Out 25, 2016 11:10 pm

gabrielsch escreveu:Utilize um laço de repetição para desbloquear as fases:
for (var i = 0; i < global.fases; i ++)
{
    global.nextroom[i] = true
}
Muito obrigado, não conhecia muito loops ai fui pesquisar e consegui entender o codigo hehe, mas a unica parte que não entendi foi aquele "++" ali no inicio do for? 

Avatar do usuário
gabrielsch
Colaborador
Colaborador
Reações: 0
Mensagens: 234

Re: Ajuda com switch e performance

Mensagem por gabrielsch » Qua Out 26, 2016 11:39 am

@MinnoP: O "++" é um operador de incremento, ele adiciona 1 a variável i toda vez que uma iteração é concluída. O uso desse operador é muito util em diversas situações, se quiser saber mais basta procurar por operadores de pré-incremento e pós-incremento no Google ou acessar esse artigo que também explica.
Imagem

Avatar do usuário
MinnoP
Membro
Membro
Reações: 0
Mensagens: 25

Re: Ajuda com switch e performance

Mensagem por MinnoP » Qua Out 26, 2016 9:34 pm

gabrielsch escreveu:@MinnoP: O "++" é um operador de incremento, ele adiciona 1 a variável i toda vez que uma iteração é concluída. O uso desse operador é muito util em diversas situações, se quiser saber mais basta procurar por operadores de pré-incremento e pós-incremento no Google ou acessar esse artigo que também explica.
Valeu cara, seu método foi bem mais fácil e precisou de bem menos código hehe, apesar de eu n ter entendi 100% do que aconteceu haha, mas muito obrigado

Responder

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes