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
» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Retorno da GMBR!!!
por vinians Qui 14 Mar 2024, 19:07

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

» Mudar cor de apenas uma palavra
por lunalol Sex 01 Mar 2024, 13:42

» 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

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

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

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21

» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39

» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16

» a funçao approach ainda existe?
por PEDRINDEV Ter 26 Dez 2023, 20:05

» Inimigo ataca até por trás! >:(
por saim Sex 22 Dez 2023, 08:55

» [RESOLVIDO]Spawn após morte
por Deception_1999 Dom 17 Dez 2023, 16:39

» Remunerado $$$ - Procuro programador para ajudar a "montar" um jogo
por theguitarmester Sáb 02 Dez 2023, 16:28

» Game maker nao abre
por Cerf Dom 26 Nov 2023, 12:01


[Tutorial] Usando MOD e DIV

+2
All-x
Kabeção
6 participantes

Ir para baixo

[Tutorial] Usando MOD e DIV Empty [Tutorial] Usando MOD e DIV

Mensagem por Kabeção Qua 29 Set 2010, 21:41

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

Módulo é o resto da divisão.
Quando você calcula:
Código:
a = 2 mod 2;
O resultado será 0 pois 2 divido por 2 não tem resto.

Quando você calcula:
Código:
a = 3 mod 2;
O resultado será 1 pois 3 divido por 2 é 1 e o resto da divisão é 1.
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;
Isso resolveria o problema mas não é nada funcional pois pode gerar muitos bugs.

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
O resultado é 50 certo?
Código:
17 mod 360
Agora o resultado é 17.
E:
Código:
370 mod 360
Agora o resultado é 10!
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
720 é o dobro 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:
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;
Com "(current_time div 1000)" transforma em segundos, com "div 60" transforma em minutos e com "mod 60" faz o ciclo para o valor corresponder a limitação de 0 a 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;
... e ...
Código:
velocidade = 0.25;
image_index = floor((image_index+velocidade) mod image_number);
São a mesma coisa!

Provavelmente é assim que o GM trabalha internamente com a variável image_index.


Bom, sabemos isso é só aproveitar.
Divirtam-se e até outro tutorial. blz


Última edição por Kabeção em Seg 04 Out 2010, 21:58, editado 3 vez(es)
Kabeção
Kabeção

Games Ranking : Sem avaliações

Data de inscrição : 08/06/2008
Reputação : 100
Número de Mensagens : 2314
Prêmios : [Tutorial] Usando MOD e DIV Empty

Medalhas x 0 Tutoriais x 7 Moedas x 0

Ouro x 3 Prata x 0 Bronze x 1

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

http://blackcapapps.blogspot.com.br/

Ir para o topo Ir para baixo

[Tutorial] Usando MOD e DIV Empty Re: [Tutorial] Usando MOD e DIV

Mensagem por All-x Qua 29 Set 2010, 21:56

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!
All-x
All-x

Games Ranking : Nota A

Notas recebidas : B A
Data de inscrição : 20/12/2008
Reputação : 189
Número de Mensagens : 2571
Prêmios : [Tutorial] Usando MOD e DIV Empty

Medalhas x 0 Tutoriais x 25 Moedas x 0

Ouro x 2 Prata x 1 Bronze x 1

Insignia 1 x 1 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
  • C ou C++


https://redscreensoft.com

Ir para o topo Ir para baixo

[Tutorial] Usando MOD e DIV Empty Re: [Tutorial] Usando MOD e DIV

Mensagem por Denis Lemos Qua 29 Set 2010, 21:59

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 !
Denis Lemos
Denis Lemos

Data de inscrição : 17/05/2009
Reputação : 1
Número de Mensagens : 938
Prêmios : [Tutorial] Usando MOD e DIV 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
  • Unity
  • C#
  • Godot
  • C ou C++


Ir para o topo Ir para baixo

[Tutorial] Usando MOD e DIV Empty Re: [Tutorial] Usando MOD e DIV

Mensagem por victor_aco Qua 29 Set 2010, 22:00

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.
victor_aco
victor_aco

Data de inscrição : 25/03/2010
Reputação : 2
Número de Mensagens : 666
Prêmios : [Tutorial] Usando MOD e DIV 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

[Tutorial] Usando MOD e DIV Empty Re: [Tutorial] Usando MOD e DIV

Mensagem por Kabeção Qua 29 Set 2010, 22:16

Que bom que gostaram!
Essa pequena curiosidade dos ciclos é bem útil. sorrindo

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!
Kabeção
Kabeção

Games Ranking : Sem avaliações

Data de inscrição : 08/06/2008
Reputação : 100
Número de Mensagens : 2314
Prêmios : [Tutorial] Usando MOD e DIV Empty

Medalhas x 0 Tutoriais x 7 Moedas x 0

Ouro x 3 Prata x 0 Bronze x 1

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

http://blackcapapps.blogspot.com.br/

Ir para o topo Ir para baixo

[Tutorial] Usando MOD e DIV Empty Re: [Tutorial] Usando MOD e DIV

Mensagem por vitor_liminha123 Qua 29 Set 2010, 22:39

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 No
vitor_liminha123
vitor_liminha123

Data de inscrição : 16/08/2010
Reputação : 12
Número de Mensagens : 510
Prêmios : [Tutorial] Usando MOD e DIV 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://www.newgrounds.com/tanber

Ir para o topo Ir para baixo

[Tutorial] Usando MOD e DIV Empty Re: [Tutorial] Usando MOD e DIV

Mensagem por Super Games Qua 29 Set 2010, 22:46

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é!
Super Games
Super Games

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 10/06/2010
Reputação : 36
Número de Mensagens : 2799
Prêmios : [Tutorial] Usando MOD e DIV Empty

Medalhas x 0 Tutoriais x 0 Moedas x 0

Ouro x 0 Prata x 1 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
  • Java
  • C ou C++


Ir para o topo Ir para baixo

[Tutorial] Usando MOD e DIV Empty Re: [Tutorial] Usando MOD e DIV

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

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