[TUTORIAL] Programação GML 01 - Funções / Scripts

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

[TUTORIAL] Programação GML 01 - Funções / Scripts

Mensagem por itarodrigo em Sex 08 Maio 2015, 11:03

Título: Programação GML 01 - Funções
Versão do GM: Todas
Dificuldade: Fácil - teórico
Link para download da Engine: Não se aplica
Requer Extensões: Não
Requer DLLs: Não
Tags: funções, GML, programação, scripts, código

Vamos aprender nesse tutorial o que são funções.

O que são funções?

Desde o ensino médio, vemos na escola o estudo de funções, lembram?

Ex:
f(x) = 5x - 3
f(x) = -2x - 7
f(x) = 11x

Na função existe um valor X que ao ser alterado, altera o resultado final, vamos relembrar também:

f(x) = 5x - 3
f(0) = 5.0 - 3 = 0 - 3 = -3
f(1) = 5.1 - 3 = 5 - 3 = 2
f(4) = 5.4 - 3 = 20 - 3 = 17
etc...

Em um sentido geral e mais simples de entender, uma função é uma fórmula que, ao ser informado um determinado valor, ela retorna o resultado de um cálculo.

Na época da sala de aula, muitos (inclusive eu) se perguntaram: "pra quê que a gente precisa aprender isso???"

Hoje, ao aprender programação, descobrimos que as funções são essenciais para o desenvolvimento de códigos mais complexos.

Como utilizar uma função em um código?

Vamos supor que você queira criar um código que calcule a área de um retângulo. Sabemos que a área de um retângulo é calculada da seguinte forma A = b . h (Área = Base X Altura).

Como poderíamos criar uma função para isso?

f(b,h) = b.h
f(2,4) = 2.4 = 8
f(3,5) = 3.5 = 15
etc...

Como usar funções no GameMaker?

No GameMaker, podemos criar funções utilizando Scripts. Os Scripts são um conjunto de códigos que recebem ou não, um valor X (que ele chama de argument), efetua um cálculo e retorna um valor para o usuário.

Vamos ver como a gente calcula a área de um retângulo utilizando Scripts:

scr_area_retangulo
Código:
return = argument0 * argument1;

Vamos entender melhor: No código acima, o Script recebe dois argumentos (nesse exemplo, argument0 recebe o valor da base e argument1 recebe o valor da altura), return representa o valor que o usuário irá receber (o produto da multiplicação dos dois argumentos).

Após criado esse Script, como eu posso "chamá-lo" no meu programa?

Código:
area = scr_area_retangulo(3,5);
O código acima irá deixa a variável area = 15, pois irá multiplicar 3X5 (como fizemos no script).

OBERVAÇÕES IMPORTANTES AO CRIAR SCRIPTS COM ARGUMENTOS: Ao criar Scripts COM argumentos, os mesmos devem seguir a seguinte sequencia: argument0, argument1, argument2, argument3, etc.

OBERVAÇÕES IMPORTANTES AO CHAMAR SCRIPTS COM ARGUMENTOS: Ao chamar Scripts COM argumentos, você deve digitar o nome do script seguido dos valores que quer para os argumentos, seguindo a mesma ordem, ex: scr_teste(valor_0,valor_1,valor_2);

As funções (Scripts) surgiram pra facilitar a nossa vida, pois evita que blocos de códigos grandes precisem ser repetidos várias vezes em seu jogo. Bastando para isso criar um script com o bloco maior, e chamar o bloco todo em apenas uma linha.

Tem mais?

Tem sim. Alguns detalhes importantes é que:

-Os Scripts não precisam de argumentos sempre, depende do resultado que você quer.
-Os argumentos podem receber qualquer tipo de dado (números, strings, sprite, objetos, etc...)

Vamos ver alguns exemplos:

Você cria um jogo com 10 objetos diferentes e precisa verificar se o obj_cursor clicou em um deles. Você provavelmente iria criar os 10 objetos e no evento Step DOS DEZ OBJETOS iria criar um código semelhante a esse:
Código:
if collision_point(x, y, obj_cursor, false, true)
{
Score += 10;
}

Usando scripts, você pode pode criar o scr_checa_colisao
Código:
if collision_point(x, y, obj_cursor, false, true)
{
Score += 10;
}

E no evento step dos 10 objetos, excrever apenas:
Código:
scr_checa_colisao();

Quais as vantagens de se usar Scripts ao invés de digitar o mesmo código 10 vezes?

A própria pergunta já responde: ganho de tempo. Agora imagine a seguinte situação: Você não quer mais que o Score aumente 10, quer que aumente apenas 5. Você teria que corrigir seu código 10 vezes, e com Script, você iria corrigir apenas uma.

Ou seja, usando scripts, você ganha em manutenabilidade (ao fazer manutenção do seu código).

Aí alguém vai me perguntar: E se cada objeto tiver um score diferente? Terei que fazer 10 códigos diferente sempre, certo?

ERRADO, lembram dos argumentos? Vamos usá-los:

Altere o scr_checa_colisao para:
Código:
if collision_point(x, y, obj_cursor, false, true)
{
Score += argument0;
}

E no objeto use:
Código:
scr_checa_colisao(3);
Código:
scr_checa_colisao(8);
Código:
scr_checa_colisao(10);
etc...

Finalizando, digo que: sempre que usar o mesmo código em vários objetos, tente criar um script para isso. Mesmo que o código altere apenas alguma informação, como no exemplo acima.

Espero que tenham gostado e até a próxima.

itarodrigo

Número de Mensagens : 599
Idade : 33
Data de inscrição : 28/08/2010
Reputação : 52
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Programação GML 01 - Funções / Scripts

Mensagem por itarodrigo em Seg 18 Maio 2015, 08:57

Criei esse duplo post para explicar algumas coisas:

Esses dias, um usuário criou um post com uma sugestão: pedindo que a staff criasse tópicos mais avançados ou de outros assuntos pois o fórum estava um pouco parado.

Dediquei um tempo pra criar esse tópico pra ver a reação dos usuários, principalmente do usuário que criou o post.

Como esperado, o resultado está aqui: 10 dias sem nenhum comentário.

Resumindo, confirmo o que eu falei lá no post da sugestão: a maioria dos usuários não está buscando tutoriais de nível intermediário ou avançado, estão apenas querendo tirar suas dúvidas nos tópicos comuns mesmo.

Abraço.

itarodrigo

Número de Mensagens : 599
Idade : 33
Data de inscrição : 28/08/2010
Reputação : 52
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Programação GML 01 - Funções / Scripts

Mensagem por matheusco em Seg 18 Maio 2015, 09:19

Sinceramente... eu tenho estado bem desanimado em comentar qualquer coisa aqui. Não só em tutoriais. Achei que o concurso mensal iria movimentar bastante o fórum, mas só tive 1 comentário no meu jogo e ao todo tiveram poucos jogos, sendo que somente 2 estão completos (pelo que vi). :/

Sobre o tópico: Bem explicativo, mesmo que não tenham comentado tenho certeza de que acabou ajudando alguém Smile

matheusco

Número de Mensagens : 395
Idade : 23
Data de inscrição : 10/08/2014
Reputação : 51
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

http://www.tutoriaisgamemaker.com.br

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Programação GML 01 - Funções / Scripts

Mensagem por theguitarmester em Seg 18 Maio 2015, 09:46

Bom, primeiramente, o seu tutorial não é de nível avançado(como você mesmo colocou no tópico).


Segundo, o fórum está fazendo isso com quem tenta criar conteúdo(tutos, engines...), que é desestimular. Você cria um tutorial que demora um tempão pensando, projetando, criando, e finalizando, para não ter comentários, ou ter pouquíssimos.
Com isso, você então chega a conclusão que o pessoal não está interessado nos tutoriais e decide para de fazê-los.


Foi assim comigo.

Mas depois desse tal tópico desse usuário, resolvi voltar a criar novos conteúdos, porém, agora não penso mais em fazer "Super" tutoriais como fiz com o do Guitar Hero(?), que demorei um tempão fazendo.



Então, uma dica que dou é não esperar mais tantos comentários como já se teve um dia(nem peguei tanto essa época), e, focar em trazer conteúdos que você não demore muito tempo a produzir, seja avançado ou simples.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Programação GML 01 - Funções / Scripts

Mensagem por itarodrigo em Seg 18 Maio 2015, 10:01

Nem esperei posts de todos os usuários, mas ao menos dos que estavam pedindo os tutos.

Indiquei o nível fácil no título do tutorial porque não é difícil de entender, porém funções é um assunto intermediário sim.

itarodrigo

Número de Mensagens : 599
Idade : 33
Data de inscrição : 28/08/2010
Reputação : 52
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Programação GML 01 - Funções / Scripts

Mensagem por theguitarmester em Seg 18 Maio 2015, 10:42

Não acho que funções são um nível intermediário(embora tenho dúvidas), porque qualquer linguagem de programação(que utilizei pelo menos) você precisará usar funções. Tudo bem que o Game Maker tem o D&D, mas, mesmo assim, não podemos qualquer coisa que use um pedaço de código como intermediário, isso até desqualificaria a linguagem.



Para finalizar:
A função collision_point acredito que é(ou possa ser) intermediária, visto que não é a função "padrão" de colisão para o Game Maker(embora utilize das maskaras padrões).

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Programação GML 01 - Funções / Scripts

Mensagem por itarodrigo em Seg 18 Maio 2015, 11:01

Vou fazer alguns comentários:

theguitarmester escreveu:Não acho que funções são um nível intermediário(embora tenho dúvidas)

Se tem dúvidas, então não é algo tão simples.

theguitarmester escreveu:porque qualquer linguagem de programação(que utilizei pelo menos) você precisará usar funções.

Algo não pode ser considerado simples apenas porque tem em todas as linguagens. A própria lógica e o algoritmo são usados para todas as linguagens e tem gente que não acha fácil.

theguitarmester escreveu:mesmo assim, não podemos qualquer coisa que use um pedaço de código como intermediário, isso até desqualificaria a linguagem.

Quando falo que funções são de nível intermediário, não me refiro a qualquer pedaço de código, e sim ao entendimento da lógica utilizada para criar tais códigos.

theguitarmester escreveu:
A função collision_point acredito que é(ou possa ser) intermediária, visto que não é a função "padrão" de colisão para o Game Maker(embora utilize das maskaras padrões).

Não me refiro a uma função ser básica ou intermediária, mas sim, uma função mais simples ou mais complexa. O que é básico ou intermediário é a forma utilizada para criá-la, deixa eu dar um exemplo:

Código:
if (i == 1){return = '1';}
if (i == 2){return = '2';}
if (i == 3){return = '3';}

Código:
switch (i){
case 1: return = '1'; break;
case 2: return = '2'; break;
case 3: return = '3'; break;}

Código:
return = string(argument0);

Observando os exemplos acima (que fazem a mesma coisa), para uns pode ser mais fácil usar 'if' que é mais comum e char mais avançado usar 'switch' (que é menos comum). E pelo conhecimento do uso de funções (mesmo básico), é possível criar o código usando uma linha.

Portanto, ao aprender a criar funções, mesmo aprendendo o básico, você poderá criar funções complexas, tudo vai depender do seu nível de lógica e algoritmo.

itarodrigo

Número de Mensagens : 599
Idade : 33
Data de inscrição : 28/08/2010
Reputação : 52
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Programação GML 01 - Funções / Scripts

Mensagem por theguitarmester em Seg 18 Maio 2015, 11:46

Se tem dúvidas, então não é algo tão simples.
Tenho dúvidas se a considero ou não simples.


Para min o switch é simples, e é bastante usado. Mas de padrão D&D do GM, não existe, então, é uma função diferente que se tem com o GML.


A questão mesmo é que, se é fácil, médio, difícil, é muito relativo mesmo, uma coisa que considero avançado pode ser intermediaria para você e vice-versa. veja o que considero avançado intermediário no GM:

Partículas - avançado
Física - (no GM8) avançado
3D - Avançado
ds_list, INI - fácil, intermediario.
Rede(online) - avançado.
funções como mp_ - intermediario.


Para alguns, partículas pode ser intermediário(ou até iniciante, vai saber), mas para min, é um recurso avançado, até porque não é um recurso de uso primário.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Programação GML 01 - Funções / Scripts

Mensagem por Superbomber em Seg 18 Maio 2015, 12:18

Se eu tivesse visto seu tuto quando você postou eu teria comentado.
Lamento por não ter comentado nada, mas você não deveria se preocupar com comentários.
Certo que na hora que comentam você pode ficar animado e tudo mais, só que elogios não deveriam ser sua motivação para ajudar as pessoas. ;)

Eu por exemplo, já tive("tenho") um fórum que mesmo sem muitos usuários que comentassem e criassem tópicos, muita gente viu os tutoriais e foi de utilidade para os mesmos.

Ao invés de ficar de olho nos comentários, deveria ficar de olho em quantas pessoas viram, e utilizaram sua informação. ;)




Acho que vou criar o tutorial de alguma coisa, só falta criatividade para pensar no que. yes

Espero que não desanime por não ter tido comentários, afinal foi assim que o fórum ficou mais parado. Desanimaram...Ora, anime-os. Very Happy

Superbomber

Ranking : Sem avaliações
Número de Mensagens : 100
Idade : 15
Data de inscrição : 28/04/2015
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Programação GML 01 - Funções / Scripts

Mensagem por itarodrigo em Seg 18 Maio 2015, 12:37

A questão de eu ter comentado isso, é porque, a uns dias atrás, algumas pessoas estavam dizendo que o fórum estava parado e tal, e pedindo tutoriais novos, na área de programação, artes, e outros temas.

Lá, eu comentei que a maioria dos usuários não tem tanto interesse nesses tipos de tutoriais quanto nos posts com respostas às suas dúvidas.

Então criei esse tutorial pra ver se algum deles iria comentar algo.

Aguardei 10 dias e percebi que, embora eles pediram, não vieram aqui pra comentar.

Sei também, como superbomber falou, que é mais importante a utilidade do tutorial do que os comentários, porém, quis ver a reação daqueles que pediram.

E vou continuar a criar mais tutoriais quando tiver tempo.

itarodrigo

Número de Mensagens : 599
Idade : 33
Data de inscrição : 28/08/2010
Reputação : 52
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Programação GML 01 - Funções / Scripts

Mensagem por Superbomber em Seg 18 Maio 2015, 12:47

Eu sei, você está se referindo ao meu tópico -> http://gmbr.forumeiros.com/t32227-sugestao-sobre-o-forum (Yes, i am HM2.)

Bom essa foi minha reação, eu não tinha visto o tutorial quando você postou. Como falei ali. ↑
E como falei, lamento por não ter comentado. :/

Superbomber

Ranking : Sem avaliações
Número de Mensagens : 100
Idade : 15
Data de inscrição : 28/04/2015
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Programação GML 01 - Funções / Scripts

Mensagem por fredcobain em Qui 28 Maio 2015, 12:37

Pessoal, independente das questões filosóficas (penso ate que estas devem ter um post específico) o tutorial vem muito bem a calhar pois cai na disciplina de boas práticas de programação (que é objeto de poucos tutoriais).

O tuto está muito bem ilustrado, explicado e escrito.
Inclusive vale a pena parabenizar novamente o ITARODRIGO que é um grande contribuidor do fórum.

Movido para a seção de tutos aprovados.

fredcobain

Ranking : Sem avaliações
Número de Mensagens : 691
Idade : 35
Data de inscrição : 14/04/2011
Reputação : 162
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [TUTORIAL] Programação GML 01 - Funções / Scripts

Mensagem por Conteúdo patrocinado Hoje à(s) 22:22


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum