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
» player não consegue andar
por lovn7 Qui 21 Nov 2024, 13:33

» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22

» (Resolvido) 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

» (RESOLVIDO) 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


GML Lição Extra - Conceitos Básicos

+4
KinKing
TheLek
Maker
GMBR
8 participantes

Ir para baixo

GML Lição Extra - Conceitos Básicos Empty GML Lição Extra - Conceitos Básicos

Mensagem por GMBR Seg 12 maio 2008, 17:49

GML Lição Extra - Conceitos Básicos

GML é uma linguagem de programação, desenvolvida exclusivamente para o Game Maker.
GML é muito parecido com C, só que não tem algumas regras chatas.

Esta lição é sobre conceitos básicos, muita gente tenta aprender GML sem ter idéia de como programar.
Então vou falar rapidamente das coisas mais simples de programação, voltado para a linguagem do GM, GML.
Isto pode ser útil mesmo pra quem já conhece alguma coisa desta linguagem, ou de alguma outra.
Para muitos esta lição será muito chata e cansativa, mas entendendo isso, o resto é decorar nome de funções ...

- Variáveis
Váriáveis são, sem sombra de dúvida, a coisa mais importante de qualquer programa.
Em algumas linguagens, é necessário declará-las, como em C. Em C, pra se usar uma variável que represente, por exemplo, quantos pontos o jogador fez, é necessário declarar a variável, dizendo seu tipo e nome:
Código:
int pontos = 0;
Já em GML, não é necessário dizer o tipo, ele assume automaticamente. Em GML existem apenas dois tipos de variáveis: real e string.
O tipo real representa um número real. Exemplos:
Código:
real1 = 0
real2 = 1.25
real3 = $FFFFFF
real4 = - 1
Veja que este tipo de variável guarda todos os tipos de números: inteiros, nulos, negativos, decimais, hexadecimais, binários, etc.

Já o tipo string, guarda caracteres. Em C é bem complicado lidar com strings, mas em GML isso é bem simples. Em GML, strings podem ser limitadas com ' ' ou " ".
Exemplos:
Código:
string1 = 'Primeira String'
string2 = "2"
string3 = "Número da sorte: 13"
Veja que mesmo contendo números, continua sendo uma string, delimitada por tudo que está dentro das aspas.

É possível em GML, converter variáveis de um tipo para outro. Para isso existem duas funções: string() e real().
Darei exemplos do que elas fazem:
Código:
str = "23"
num = real(str) // real(str) => 23
show_message(str + " " + string(num)) // => "23 23"

Em algumas linguagens, principalmente as mais novas, orientadas a objeto, existe o tipo Boolean, que é usado nos ifs, por exemplo. Os Booleans assumem dois valores: true ou false.
Se você digitar true ou false, em GML, verá que existem essas variáveis. Porém não existe o tipo Boolean. Então você deve estar pensando, como que, em GML, eu digo que 5 > 2 é verdadeiro?
GML usa o tipo real para este tipo de coisa. Qualquer valor maior que 0, é considerado verdadeiro. Qualquer valor menor ou igual que 0 é considerado falso. As variáveis true e false são na verdade constantes (true = 1, false = 0).

Os operadores aritméticos (que fazem contas) em GML são: +, -, *, /, div, mod (somar, subtrair, multiplicar, dividir, divisão de inteiros, resto da divisão).

Em GML, usa-se o sinal de = para atribuir valores.
É possível usar += para somar, -= para subtrair, *= para dividir e /= para multiplicar, como em outras linguagens.
Pra quem gosta de C, em GML não existem os operadores ++ e --.
Pra quem é curioso, existem muitos outros operadores: ~, ||, &&, |, &, Happy, ^, >>, <<, que não tem muita utilidade na maioria dos jogos, e exigem um conhecimento bem maior para que se entenda eles. Um dia eu juro que faço um tutorial explicando isso. ;D

Em GML existem arrays, que podem conter real e string simultaneamente. Para mais informações sobre arrays em GML, veja este tutorial: Tutorial Básico sobre Arrays.

- Testes
Teste é o nome bonitinho do if. A palavra if significa se, isto é, você diz que certa parte do código só será executado caso determinada condição seja verdadeira.
A construção formal do if em GML é:
Código:
if <condição> then
{
<comandos>
}
else
{
<comandos>
}
Isto é:
Código:
SE <condição> ENTÃO
{
<comandos>
}
SENÃO
{
<comandos>
}
Agora, as boas notícias. O then não é necessário em nenhum caso, você só coloca se quiser. O else só é necessário caso você queira que aconteça alguma coisa caso a condição seja falsa.
Em GML a estrutura else if também funciona, como na maioria das linguagens.
Código:
if <condição> then
{
<comandos>
}
else if
{
<comandos>
}
else
{
<comandos>
}
Pra entender as condições, você deve saber da existência dos operadores de comparação (>, <, >=, <=, =, != ou <> -- maior que, menor que, maior ou igual que, menor ou igual que, igual e diferente).
Pra aproveitar mais as condições, você deve saber da existência dos operadores lógicos: E, OU e NÃO. Em GML eles são and, or e not.
Os operadores lógicos servem pra modificar as condições, reduzindo o número de ifs.

Exemplo: o herói do meu jogo só pode atirar se possuir o item arma e se tiver munição.
Código:
//Sem usar operadores lógicos (maneira idiota de fazer :P)
if ja_tem_a_arma
{
  if municao
  {
    <atirar>
  }
}

//Usando operadores lógicos (maneira esperta de fazer :) )
if ja_tem_a_arma and municao
{
  <atirar>
}
Agora ele só vai atirar caso a primeira condição E a segunda condição sejam verdadeiras.
O operador or executa o código caso uma condição OU a outra condição seja verdadeira.
O comando not inverte o valor lógico: verdadeiro vira falso e falso vira verdadeiro.

- Laço
Laço é o que alguns conhecem como loop. Um amigo meu diz que "computadores não travam, entram em loop infinito, sem condição de parada".
O laço é composto de uma condição, e um bloco de código.
A condição é avaliada, e então ele executa o bloco de código. Parece muito com um teste comum, com a diferença de que esse laço pode ser executado várias, ou infinitas vezes.
Em GML existem vários tipos de laço, então vou falar de um por um, porque é difícil dar uma definição geral.

repeat
O laço mais idiota que existe. repeat significa repetir.
Ele repete o mesmo bloco de código várias vezes:
Código:
var = 0
repeat(10)
{
var += 1
}
Ele irá somar 1 à variável var 10 vezes.

while
Esse é o principal laço. Qualquer outro laço pode ser representado através deste. while significa enquanto.
A estrutura é algo assim:
Código:
ENQUANTO <condição> FAÇA <comandos>
Exemplo:
Código:
while not keyboard_check(vk_esc)
{
  <comandos>
}
Esse laço fará os <comandos> enquanto o usuário não apertar a tecla ESC.

do ... until
É um while com a condição invertida. until significa até. Vou usar o do...until pra fazer a mesma coisa que o exemplo anterior:
Código:
do
{
  <comandos>
}
until keyboard_check(vk_esc)
A estrutura é:
Código:
FAÇA <comandos> ATÉ <condição>
Esse laço fará os <comandos> até que o usuário pressione a tecla ESC.
Note que é exatamente a mesma coisa do while, só que dito de um jeito diferente.

for
Esse também é uma espécie de while, só que com coisas a mais. É possível fazer o mesmo laço que é feito no for com o while.
O for é o laço mais usado pra quem usa o Game Maker. Na verdade basta você saber como funciona o for, os outros são desnecessários, você quase nunca vai ter que usar.
A estrutura é a seguinte:
Código:
PARA CONTADOR DE VALOR_INICIAL A VALOR_FINAL FAÇA  <comandos>
Na verdade não é bem assim, mas isso dá uma idéia do for pra várias linguagens.
Em GML, o for é como em C:
Código:
for(<comando1>; <condição>; <comando2>)
{
  <comandos>
}
Funciona assim:
Passo 1 - <comando1> é executado.
Passo 2 - <condição> é testada.
Passo 3 - Se <condição> é verdadeiro, <comandos> são executados. Se for falso, acaba o for.
Passo 4 - <comando2> é executado.
Passo 5 - Volta-se para o 2 passo.

Pode parecer complicado. Vou fazer um exemplo com for, e o mesmo exemplo usando while, que é mais fácil de entender:
Código:
for (i=0; i<3; i+=1)
{
array[i] = 0
}

Código:
i = 0 //Passo 1
while i < 3 //Passo 2
{
  array[i] = 0 //Passo 3
  i += 1 // Passo 4
} //Fim do while, volta-se ao início -> Passo 5

Estes dois laços fazem a mesma coisa. No final deles, o array terá os valores:
Código:
array[0] = 0
array[1] = 1
array[2] = 2

Vejam este outro exemplo:
Código:
for (i=0; i<6; i+=2)
{
array[i] = i
array[i+1] = i - 1
}
Ganha um crédito o primeiro que responder que valores terá o array no final do for. ;) Tente fazer de cabeça, sem ter que digitar esse código no GM pra ver o que acontece. ;D
Código:
array[0] = ?
array[1] = ?
array[2] = ?
array[3] = ?
array[4] = ?
array[5] = ?


- Seleção de casos
Este aqui é só uma maneira de economizar ifs (muitos ifs).
Vamos supor que eu tenha um menu, com três opções: "Novo Jogo", "Carregar Jogo" e "Sair". Pra saber em que posição o cursor do menu está, eu uso uma variável.
Agora, o que acontece quando o usuário aperta ENTER. Depende da posição do cursor:
//posicao_cursor é a variável que indica, adivinhe, a posição do cursor no menu Razz
Código:
if keyboard_check_pressed(vk_enter)
{
switch(posicao_cursor)
{
  case 0: //Novo Jogo
    show_message("Você escolheu a opção Novo Jogo!")
    break
  case 1: //Carregar Jogo
    show_message("Você escolheu a opção Carregar Jogo!")
    break
  case 2: //Sair
    show_message("Você escolheu a opção Sair!")
    break
  default:
    show_message("Você não escolheu nenhuma opção!")
}//Fim do switch
} //Fim do if
Acho que já dá pra entender. Ele procura o valor da variável em um dos cases. Quando ele encontra, ele executa o código até encontrar um break. Caso ele não encontre o valor em nenhum case, ele executa o que está em default.
O comando break pode ser usado também para sair de qualquer um dos loops que eu falei antes. Ele quebra qualquer laço.

-Funções e Scripts
Ambos funcionam da mesma forma. Só que as funções já vem de fábrica, já estão implementadas no GM. Os Scripts você cria, ou copia. ;D
Funções são pedaços de código que podem ser reutilizados, são meio que descartáveis. Além disso você pode passar parâmetros que alteram o modo como a função funciona.
Em GML, você só pode definir Scripts. Então, os parâmetros (ou argumentos) da sua função tem nomes pré-definidos: argument0, argument1, argument2, ... , argument15.
As funções podem apenas executar códigos, mas podem também retornar valores, com o comando return (veremos o exemplo).
Um exemplo de script para calcular distância entre dois objetos:
Script: distancia
Código:
{
  dist = sqrt(power(argument0.x-argument1.x,2)+power(argument0.y-argument1.y,2))
  return dist
}
Agora, em um código de um objeto qualquer, eu posso usar:
Código:
var = distancia(objeto1,objeto2)
Agora a variável var vai ter o valor da distância entre os objetos 1 e 2, já que eu usei o comando return para retornar o valor da variável dist no meu script.
Observação: o comando return encerra a execução do script. Depois que ele retornar o valor ele pára.

- with
with é exclusivo de GML, não conheço nada parecido em nenhuma outra linguagem, não faria muito sentido.
O with executa o código no objeto que eu disser, não necessariamente no objeto em que estou. Se eu coloco no Step do objeto1 assim:
Código:
with(objeto2)
{
direction = 90
}
Esse código irá mudar a direção do objeto2, que é o parâmetro do with, como se o código tivesse sido executado no objeto2.
Façam alguns testes e entenderão.

- Outras coisas mais
Comentários. Comentários em GML são como em C ou C++: precedidos de // ou limitados por /* */.

Constantes. As constantes pré-definidas de GML são:
Código:
true = 1
false = 0
pi = 3.1415...
Além de constantes para cores, efeitos, alinhamento de texto, etc, mas essas você aprende com o tempo.
Lembre-se que em Global Game Settings > Constants você pode definir suas próprias constantes.


Bem, é isso, aproveitem, prometo fazer mais alguns em breve.
E como eu havia dito, é um tutorial longo e cansativo, mas que os deixa mais capazes. Boa sorte com o Game Maker. ;)


Autor KJr
avatar
GMBR

Data de inscrição : 26/02/2008
Reputação : 6
Número de Mensagens : 352
Prêmios : GML Lição Extra - Conceitos Básicos Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

https://gmbr.forumeiros.com

Ir para o topo Ir para baixo

GML Lição Extra - Conceitos Básicos Empty Re: GML Lição Extra - Conceitos Básicos

Mensagem por Maker Qui 12 Jun 2008, 20:53

Muito bom Ramon Wadry.

Tem muitas coisas aí que vão me ajudar muito (principalmente o "with"), agora nao vou mais precisar digitar comandos como destruição ou colisão nos 2 objs.


@ Nota 10
Maker
Maker

Data de inscrição : 09/06/2008
Reputação : 0
Número de Mensagens : 51
Prêmios : GML Lição Extra - Conceitos Básicos 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

GML Lição Extra - Conceitos Básicos Empty Re: GML Lição Extra - Conceitos Básicos

Mensagem por TheLek Sex 13 Jun 2008, 17:13

aew legal o tutorial mas eu nao consigo entender isso ainda =/ eu so consigo faser por aqueles quadrados que poe nos eventos, desse jeito da algum problema??
TheLek
TheLek

Data de inscrição : 11/06/2008
Reputação : 0
Número de Mensagens : 16
Prêmios : GML Lição Extra - Conceitos Básicos 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

GML Lição Extra - Conceitos Básicos Empty Re: GML Lição Extra - Conceitos Básicos

Mensagem por GMBR Sex 13 Jun 2008, 17:21

TheLek escreveu:aew legal o tutorial mas eu nao consigo entender isso ainda =/ eu so consigo faser por aqueles quadrados que poe nos eventos, desse jeito da algum problema??
Não, nenhum ^^
Mas quando tu tiver mais avançado os conhecimentos sobre GML serão indispensáveis.
avatar
GMBR

Data de inscrição : 26/02/2008
Reputação : 6
Número de Mensagens : 352
Prêmios : GML Lição Extra - Conceitos Básicos Empty

Medalhas x 0 Tutoriais x 1 Moedas x 0

Ouro x 0 Prata x 0 Bronze x 0

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

https://gmbr.forumeiros.com

Ir para o topo Ir para baixo

GML Lição Extra - Conceitos Básicos Empty Re: GML Lição Extra - Conceitos Básicos

Mensagem por TheLek Sex 13 Jun 2008, 17:55

Ramon vc tem algum tuto pra jogo de plataforma no modo dos quadrados??? Very Happy
TheLek
TheLek

Data de inscrição : 11/06/2008
Reputação : 0
Número de Mensagens : 16
Prêmios : GML Lição Extra - Conceitos Básicos 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

GML Lição Extra - Conceitos Básicos Empty Re: GML Lição Extra - Conceitos Básicos

Mensagem por KinKing Sex 13 Jun 2008, 18:26

Há o meu tutorial, TheLek, que cobre alguns dos conceitos mais básicos, e é feito com Ícones (seus quadrados). Procure-o Smile
KinKing
KinKing

Data de inscrição : 29/05/2008
Reputação : 16
Número de Mensagens : 422
Prêmios : GML Lição Extra - Conceitos Básicos 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://felipejoys.webnode.com

Ir para o topo Ir para baixo

GML Lição Extra - Conceitos Básicos Empty Re: GML Lição Extra - Conceitos Básicos

Mensagem por bruno sxs Qua 03 Dez 2008, 12:35

O GM realmente é muito bom...
e é o melhor no quesito custo/benefício... baratinho e tão poderoso... eu sempre usei mfx, depois fui pra mmf, e finalmente o mmf2...
Mas, o gm tem funções muito boas...
bruno sxs
bruno sxs

Data de inscrição : 18/10/2008
Reputação : 0
Número de Mensagens : 3
Prêmios : GML Lição Extra - Conceitos Básicos 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

GML Lição Extra - Conceitos Básicos Empty Re: GML Lição Extra - Conceitos Básicos

Mensagem por Lap1994 Dom 21 Dez 2008, 10:50

Fico faltano uns aew!
break:
Para o procedimento atual e continua com o proximo procedimento:
Código:
if testanoBreak {
 blahblahblah;
 if blah?
 { break; }//Aki agente pula pro usamoBreak = true
 blahblahblah;
}
UsamoBreak=True;
Isso eh a msm coisa q
Código:
if testanoBreak {
 blahblahblah;
 if NOT blah?
 {
  blahblahblah;
 }
}
UsamoBreak=False;

Tb tem o continue(pra num dah game over XP)
O continue só pode ser usado em procedimentos while-do, do-until e for. Ele faz kinem o break, para de executar o procedimento, mas inves de ele sair do procedimento ele so executa o loop.
Código:
while blah < blahblah {
 if not blahs[blah].ehBlahMsm continue;
 with blahs[blah] do blahblahblah();
}
Eh o msm q
Código:
while blah < blahblah {
 if blahs[blah].ehBlahMsm
 {
  with blahs[blah] do blahblahblah();
 }
}
E por último tem o EXIT;
Se você tiver uma função q tiver EXIT; Qndo chegar no EXIT ela vai parar, mas o código q estava executando a função vai continuar.
Se vc colocar EXIT num código no GM ele vai parar o código. Se vc tiver dois codigos ele só para o primeiro.(Código q eu to falano eh akele negocio de arrasta naum o codigo q vc escreve)
Código:
if (ehPraUsaOEXIT) exit;
blahblahblah;
Bem simples neh? Eh o msm q
Código:
if not (ehPraUsaOEXIT){
blahblahblah;
} // Isso aki vai ateh o final do código por q o exit eh para o código o msm q o break eh pros procedimentos.
Lap1994
Lap1994

Data de inscrição : 20/11/2008
Reputação : 0
Número de Mensagens : 350
Prêmios : GML Lição Extra - Conceitos Básicos 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://lap1994.deviantart.com/

Ir para o topo Ir para baixo

GML Lição Extra - Conceitos Básicos Empty Re: GML Lição Extra - Conceitos Básicos

Mensagem por carlos.grand Seg 15 Nov 2010, 08:31

NO amigão valeu! BEm que vc poderia fazer um curso de GML e posta no site eu ate te pago pra vc me ensina a fazer GML! aguardo resposta! meu email
carlos.grand@hotmail.com
carlos.grand
carlos.grand

Data de inscrição : 26/05/2010
Reputação : 0
Número de Mensagens : 7
Prêmios : GML Lição Extra - Conceitos Básicos 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

GML Lição Extra - Conceitos Básicos Empty Re: GML Lição Extra - Conceitos Básicos

Mensagem por Mr. Kaleb Seg 15 Nov 2010, 09:30

O GMBR n acessa mais o forum. Dê uma olhada no ultimo post.
Já que ele reviveu, ótimo tutorial, gostaria de ter visto ele mais cedo Very Happy, vai ajudar muitos outros também.
Mr. Kaleb
Mr. Kaleb

Games Ranking : Nota C

Notas recebidas : C
Data de inscrição : 07/09/2010
Reputação : 21
Número de Mensagens : 1400
Prêmios : GML Lição Extra - Conceitos Básicos 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

GML Lição Extra - Conceitos Básicos Empty Re: GML Lição Extra - Conceitos Básicos

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