Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Ontem à(s) 13:33
» É possível fazer istó no game maker
por William Lima Ontem à(s) 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
[Tutorial] Usando MOD e DIV
+2
All-x
Kabeção
6 participantes
Página 1 de 1
[Tutorial] Usando MOD e DIV
As expressões mod e div fazem parte de qualquer boa linguagem de programação, e assim como os loops que fazem basicamente a mesma coisa mas podem ter utilidades diferentes esses dois operadores podem facilitar nossa vida em alguns casos.
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 é o resto da divisão.
Quando você calcula:
Quando você calcula:
Agora, pra que serve isso?
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?
Mas ângulos vão de 0 a 360.
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:
Então ao invés dessa gambiarra usamos mod para fazer um ciclo facilmente independente do valor atual de image_angle:
Agora a variável nunca passará de 360 mas por que?
Abra um jogo no modo debug do GM apertando F6, naquele janela clique no icone "+" e digite:
E:
O resto da divisão de 370 por 360 é 10 e é exatamente o valor correspondente ao angulo apos passar de 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:
Muito conveniente não acha?
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:
1 minuto são 60 segundos e eles vão de 0 a 60 também:
1 hora são 3600 segundos:
E é isso!
Desenhe na tela e agora você sabe a quado tempo seu computar esta ligado.
Há também o ciclo de animação do image_index, ou seja:
Provavelmente é assim que o GM trabalha internamente com a variável image_index.
Bom, sabemos isso é só aproveitar.
Divirtam-se e até outro tutorial.
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:
a = 2 mod 2;
Quando você calcula:
- Código:
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:
image_angle += 15;
Mas ângulos vão de 0 a 360.
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:
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:
image_angle = (image_angle mod 360);
Agora a variável nunca passará de 360 mas por que?
Abra um jogo no modo debug do GM apertando F6, naquele janela clique no icone "+" e digite:
- Código:
50 mod 360
- Código:
17 mod 360
E:
- Código:
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:
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:
// 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:
segundos = (current_time div 1000) mod 60;
1 minuto são 60 segundos e eles vão de 0 a 60 também:
- Código:
minutos = ((current_time div 1000) div 60) mod 60;
1 hora são 3600 segundos:
- Código:
horas = (current_time div 1000) div 3600;
E é isso!
Desenhe na tela e agora você sabe a quado tempo seu computar esta ligado.
- Código:
draw_text(8,8,string(horas)+':'+string(minutos)+':'+string(segundos));
Há também o ciclo de animação do image_index, ou seja:
- Código:
image_speed = 0.25;
- Código:
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.
Última edição por Kabeção em Seg 04 Out 2010, 21:58, editado 3 vez(es)
Re: [Tutorial] Usando MOD e DIV
Kabeção:
Muito conveniente não acha?
Com certeza Top Man, eu sabia que ao girar a sprite o número poderia passar de 360, mas não sabia que tinha um valor limite pra isso.
Lembro que quando li algo sobre c++ as partes sobre operações matemáticas e variáveis falavam algo sobre o resto da divisão.
Ah e ótimos exemplos, é dificil explicar esses operadores sem alguns exemplos. E você encontrou os exemplos perfeitos.
Espero mais tutoriais seus!
FLWS!
Re: [Tutorial] Usando MOD e DIV
Você que acha simples, mas até entender bem isso gera uma confusão, eu entedi perfeitamente, mas terei que ler mais vezes para ficar gravado na cabeça !
O "div" eu gostei bastante, pois pode converter pontos em tempo ou vice-verso, igual ao Super Mario quando passa a fase o tempo restante vira pontos, muito show essas funções e obrigado por fazer o ótimo tutorial nos ensinado !
Muitas vezes eu precisei do "mod" para fazer agora não me lembro oque mais que era, mas não pude fazer porque achava que não tinha como, mas agora aprendi e obrigado novamente por ensinar, dá próxima vez que precisar já vou saber !
Espero mais tutorias desse tipo, pois sei que tem um monte desses negocinhos no GM que não tenho nem idéia de para que serve e como usar, como o Alex disse você usou os exemplos perfeitos, ficando fácil de se entender !
O "div" eu gostei bastante, pois pode converter pontos em tempo ou vice-verso, igual ao Super Mario quando passa a fase o tempo restante vira pontos, muito show essas funções e obrigado por fazer o ótimo tutorial nos ensinado !
Muitas vezes eu precisei do "mod" para fazer agora não me lembro oque mais que era, mas não pude fazer porque achava que não tinha como, mas agora aprendi e obrigado novamente por ensinar, dá próxima vez que precisar já vou saber !
Espero mais tutorias desse tipo, pois sei que tem um monte desses negocinhos no GM que não tenho nem idéia de para que serve e como usar, como o Alex disse você usou os exemplos perfeitos, ficando fácil de se entender !
Denis Lemos- Data de inscrição : 17/05/2009
Reputação : 1
Número de Mensagens : 938
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Plataformas :- Game Maker 8.0 ou 8.1
- Game Maker Studio 1.4
- Unity
- C#
- Godot
- C ou C++
Re: [Tutorial] Usando MOD e DIV
Realmente muito bom!
Eu também já tinha visto isso em algum lugar (uma apostila de lógica de programação se não me engano, faz muito tempo) mas não tinha entendido muito bem.
Agora com os exemplos ficou mais fácil de entender.
Eu também já tinha visto isso em algum lugar (uma apostila de lógica de programação se não me engano, faz muito tempo) mas não tinha entendido muito bem.
Agora com os exemplos ficou mais fácil de entender.
victor_aco- Data de inscrição : 25/03/2010
Reputação : 2
Número de Mensagens : 666
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Tutorial] Usando MOD e DIV
Que bom que gostaram!
Essa pequena curiosidade dos ciclos é bem útil.
Esqueci de mencionar outra coisa.
Todo número par divido por 2 não tem resto mas todo número ímpar divido por 2 sobre 1.
Já dá para imaginar o que dá pra fazer com isso né?
Adicionado no tutorial!
Essa pequena curiosidade dos ciclos é bem útil.
Esqueci de mencionar outra coisa.
Todo número par divido por 2 não tem resto mas todo número ímpar divido por 2 sobre 1.
Já dá para imaginar o que dá pra fazer com isso né?
Adicionado no tutorial!
Re: [Tutorial] Usando MOD e DIV
Vc intornou minha cabeça!
Entendi, mas irei ler umas 5 vezes para fixar, é muito texto, com lógicas meio complicadas, mas achei muito bom o tuto, e não sabia disso
Entendi, mas irei ler umas 5 vezes para fixar, é muito texto, com lógicas meio complicadas, mas achei muito bom o tuto, e não sabia disso
Re: [Tutorial] Usando MOD e DIV
Otimo tutorial Kabeção! Está super bem explicado, não conhecia essa função, talvez um dia eu prescise desse tutorial, entam irei salvar seu tuto como Faforitos para não esquecer, mais é muito dificil de memorizar isso, vou ler mais umas vezes para ver que memorizo para não esquecer numa hora que tiver prescisando disso. Aguardo mais tutos seus Kabeção!
Até!
Até!
Super Games- Games Ranking :
Notas recebidas : C
Data de inscrição : 10/06/2010
Reputação : 36
Número de Mensagens : 2800
Prêmios :
x 0 x 0 x 0
x 0 x 1 x 0
x 0 x 0 x 0
Plataformas :- Game Maker 8.0 ou 8.1
- Game Maker Studio 1.4
- Game Maker Studio 2.0
- Java
- Godot
- Javascript
- C ou C++
Tópicos semelhantes
» Tutorial: usando a dll gmFTP
» [Tutorial]Criando e usando uma DLL
» [Tutorial]Usando os novos componentes do GM8
» [tutorial] Usando time lines
» preciso de um tutorial usando Inkscape
» [Tutorial]Criando e usando uma DLL
» [Tutorial]Usando os novos componentes do GM8
» [tutorial] Usando time lines
» preciso de um tutorial usando Inkscape
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos