[PROG] [Tutorial] Usando MOD e DIV
Enviado: Sex Abr 29, 2016 11:51 am
Embora simples, esse tutorial requer um nível intermediario pois você precisa estar acostumado ao modo que o GM trabalha e saber GML.
Módulo
Módulo é o resto da divisão.
Quando você calcula:
Código: Selecionar todos
a = 2 mod 2;
Quando você calcula:
Código: Selecionar todos
a = 3 mod 2;
Agora, pra que serve isso?
Saber o resto da divisão pode ser mais útil do que parece
A mais simples utilidade do mod é formar ciclos, por exemplo:
Você tem que fazer a sprite de um objeto girar então o que você faz?
Código: Selecionar todos
image_angle += 15;
Quando image_angle passar de 360 a sprite continuara a girar normalmente mas a variável continuará a aumentar infinitamente e quando atingir o limite o jogo vai travar.
Normalmente para evitar isso poderiamos fazer:
Código: Selecionar todos
if image_angle > 360 image_angle -= 360;
Então ao invés dessa gambiarra usamos mod para fazer um ciclo facilmente independente do valor atual de image_angle:
Código: Selecionar todos
image_angle = (image_angle mod 360);
Abra um jogo no modo debug do GM apertando F6, naquele janela clique no icone "+" e digite:
Código: Selecionar todos
50 mod 360
Código: Selecionar todos
17 mod 360
E:
Código: Selecionar todos
370 mod 360
O resto da divisão de 370 por 360 é 10 e é exatamente o valor correspondente ao angulo apos passar de 360.
Código: Selecionar todos
720 mod 360
O resto dessa conta é 0 e também é o valor correspondente ao angulo apos passar de 360.
Dá até para saber se um número é par ou ímpar!
Todo número par divido por 2 não tem resto e todo número ímpar divido por dois sobra 1, então fazer um script que retornar se o número é par ou ímpar não tem segredo:
Código: Selecionar todos
// par_impar(x)
// Retorna:
// 0 = par
// 1 = ímpar
return argument0 mod 2;
Muito conveniente não acha?
Divisão inteira
Divisão inteira é uma divisão que não tem fração ao decimal, ou seja, 2 / 3 é 0.666... mas 2 div 3 é apenas 0.
É o mesmo que usar floor(x).
Bem simples.
A conversão de tempo para fazer um relógio ilustra perfeitamente a utilidade de div e mod.
A variável current_time retorna o tempo em milisegundos desde de quando o computador foi reiniciado.
Como posso converter isso em horas, minutos e segundos?
1000 milisegundos são um segundo, e no relógio eles vão de 0 a 60 então:
Código: Selecionar todos
segundos = (current_time div 1000) mod 60;
Código: Selecionar todos
minutos = ((current_time div 1000) div 60) mod 60;
1 hora são 3600 segundos:
Código: Selecionar todos
horas = (current_time div 1000) div 3600;
Desenhe na tela e agora você sabe a quado tempo seu computar esta ligado.
Código: Selecionar todos
draw_text(8,8,string(horas)+':'+string(minutos)+':'+string(segundos));
Código: Selecionar todos
image_speed = 0.25;
Código: Selecionar todos
velocidade = 0.25;
image_index = floor((image_index+velocidade) mod image_number);
Provavelmente é assim que o GM trabalha internamente com a variável image_index.
Bom, sabemos isso é só aproveitar.
Divirtam-se e até outro tutorial.