Página 1 de 1

Ajuda com switch e performance

Enviado: Dom Out 23, 2016 1:54 am
por MinnoP
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

Re: Ajuda com switch e performance

Enviado: Dom Out 23, 2016 4:02 am
por Zero
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;}

Re: Ajuda com switch e performance

Enviado: Dom Out 23, 2016 4:11 pm
por MinnoP
Muito obrigado Zero, tive que fazer isso mesmo hehe

Re: Ajuda com switch e performance

Enviado: Dom Out 23, 2016 4:27 pm
por gabrielsch
Utilize um laço de repetição para desbloquear as fases:
for (var i = 0; i < global.fases; i ++)
{
    global.nextroom[i] = true
}

Re: Ajuda com switch e performance

Enviado: Ter Out 25, 2016 11:10 pm
por MinnoP
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? 

Re: Ajuda com switch e performance

Enviado: Qua Out 26, 2016 11:39 am
por gabrielsch
@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.

Re: Ajuda com switch e performance

Enviado: Qua Out 26, 2016 9:34 pm
por MinnoP
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