..:: P.V Supreme ::.. Membro
Sexo : Mensagens : 241
| Assunto: [Tutorial] Explicação Geral sobre GML Qua Dez 15, 2010 10:06 am | |
| Explicação Geral sobre GMLData Log: 26/01/10: Postado 28/01/10: Adicionado observações sobre "Object"s. 30/01/10: Erros na area de Variaveis corrigidos.(Obrigado KJr por avisar) 08/02/10: Adicionado explicação sobre divisão e multiplicação; Seçao de Vars. 16/06/10: Modificada a area de variaveis; adicionada explicação sobre a sintaxe " var".(Obrigado L0l-King por avisar)
Decidi fazer esse tutorial(ou aula?) porque a seção de GM esta muito queta e acho que se deve ao fato de que o GM é tão completo que requer conhecimentos muito maiores do que o RPGmk, e por isso muita gente se desanima; também, após ler as aulas da qui do site, vi que elas são bem completas, mas elas abordam a liguagem do jogo de forma direta, aplicando no mesmo momento que ensinam, e para quem não entende nada de programação elas confundem pacas. Neste texto vou mostrar as estruturas de programação usadas em GML e em todas as outras liguagens de programação(eu acho...), e depois vou mostrar as funções mais usadas em GML; se vc realmente prestar atenção, eu te garanto que vc vai ter base para fazer um jogo por si só. Ah, porfavor, leia os Spoilers também, eles não estão la apenas para encurtar o tamanho do topico; eles possuem informações valiosas. INTRO:
Você me diz: " Por que eu vou usar GML e não só eventos?É mais fácil e acessível ò-Ô?" Eu respondo: " Simples; É mais fácil você fazer um jogo sem bugs via GML(acredite, eu já fiz um jogo com os eventos do GM, e ele tem uns bugs desagradáveis), alem de que é mais "bonito" e "limpo" fazer o jogo via GML (Oque você gastaria vários eventos para fazer, você gasta uma folha de comandos; mas estético e fácil de editar)" Você me diz: " Quando eu comecei a usar o RPGmk eu tentei aprender Ruby, mas não entendi bulunfas; GML deve ser a mesma coisa. " Eu digo: Eu também não entendi bulunfas de RGSS; ele requer uma certa dedicação porque além de entender a linguagem(a parte facil), você tem que entender as classes já criadas para o jogo e etc(o que complica um pouco); Mas com GML é mais facil, pq ele possui metodos mais instintivos para iniciantes ( place_ é um deles), e com ele, é do zero, o que te leva a compreender melhor os mecanismos do jogo que você vai criar; além disso, GML é uma linguagem bem próxima da lógica "humana", o que ajuda a novatos pois ele não trabalha necessariamente com a parte lógica da maquina como em algumas linguagens mais básicas( como assembly etc). Ou seja, GML é fácil, você só precisa da base, e ela esta logo abaixo.
PARTE LÓGICA: Vamos começar a prender a lógica de programação usada no GML(e em diversas outras linguagens). 1° Variáveis: Entendendo: Variáveis são estruturas que comportam valores logicos(ou como me ensinaram, são repartições lógicas da memória do PC); ou seja, números, palavras, e certos parâmetros especiais como teclas do teclado etc. Elas são primordiais em qualquer programa de PC; Há vários tipos de variáveis, especificas para cada tipo de valor, mas no GML como em algumas outras linguagens, você não tem que necessariamente "declarar" qual o tipo de variável, logo é mais simples. Aplicando: Você vai usar vars para trabalhar com valores, logo, você vai usá-las o tempo todo, mesmo que não perceba. Para criar uma variável em GML, você simplesmente coloca o nome da var e atribui um valor a ela, o valor que você atribuir a ela, vai definir o tipo da mesma. - Código:
-
//Criando uma Var HP = 100 Nome = 'Smog'; Viu, simples e rápido; no caso acima nós fizemos uma variável que recebe valores numéricos e outra que recebe valores "escritos"(Não vou me aprofundar nos nomes técnicos, depois eu toco no assunto). Para trabalharmos com ela de novo, basta fazermos o mesmo que fizemos quando nós as criamos. Tipos de Variáveis- Spoiler:
Esses são os tipos mais usados de vars(não precisa necessariamente saber isso): Double: Valores reais como 1,1 ou 2,123123; também comporta inteiros como 1 ou 2. Inteiras: Valores inteiros como 1 ou 2 ou 445 ou 100000000. Booleans: Em RPGmk elas são as "switchs", ou seja elas recebem 2 valores especiais, "True" ou "False"; literalmente como esta em aspas. Strings: Valores "escritos"; letras e números. Não se engane, os valores de uma string podem até ser números, mas para o sistema, eles são apenas caracteres; a única diferença entre um "A" e um "B" é o código que se refere a ele na tabela ASCII(ou seja, números em strings não contam como valor numérico!; para pegar um valor numérico de uma string é necessário convertê-lo com um método especial). Valores de string são declarados entre aspas, assim: "Nome" ou 'Nome'; não sei se GML faz diferença entre aspas simples ou dupla; por vier da duvidas use duplas. OBS: Na prática, o GM tem dois tipos de Vars: Strings e Reais; ao atribuir "true" ou "false" a uma var, você atribui 0 ou 1(sim, isso tem a ver com binário); mas como eu disse, não se prenda a isso ok?
Extensão de uma variável:- Spoiler:
Existem 2 tipos de variáveis em GML(e em algumas outras linguagens também), as locais e as globais. Locais são as variáveis que só "existem" em um único objeto, ou seja, elas abrangem/existem apenas paras as ações do objeto em questão, sendo assim, para um outro objeto a variável em questão não existe. Caso você queira mecher nessa variável através de outro objeto, você deve colocar o nome do objeto + '.' + o nome da var:
Toda variavel que começa com a sintaxe "var" só funcionara na parte de codigo onde ela foi declarada, como por exemplo, quando uma variavel é declarada entre chaves ( {} ). - Código:
-
//Objeto A var HP; HP = 100;
- Código:
-
//Objeto B A.HP -= 10;
As vars globais, diferentes das locais, são "visíveis" e acessíveis para todos os objetos, entenda a var global como sendo a Internet e a local como sendo uma Intranet(não é o melhor exemplo né?).
- Código:
-
//Objeto A globalvar HP; HP = 200; - Código:
-
//Objeto B HP -=10;
Dando Valor a Vars- Spoiler:
Para atribuir valor a uma variável, você tem que se lembrar que quando colocamos o = estamos falando que a variável tal, esta recebendo valor tal, logo se nós quisermos que essa variável receba o valor atual dela + um outro, nós colocamos que a variável recebe ela mesma mais esse valor;olhe abaixo para entender. Somando: Sintaxe: = + ; Modo Resumido: += ; - Código:
-
//Aumentando o valor da Var HP em 10 pts HP = HP + 10; - Código:
-
//Aumentando o valor da Var HP em 10 pts de modo resumido HP += 10; Subtraindo: Sintaxe: = - ; Modo Resumido: -= ; - Código:
-
//Diminuindo o valor da Var HP em 10 pts HP = HP - 10; - Código:
-
//Diminuido o valor da Var HP em 10 pts resumido HP -= 10; Dividindo e Multiplicando: Não ha modo resumido de se dividir um valor em uma var. Se você quer que o valor já existente na var seja dividido/multiplicado, você tera que fazer do modo extenso.
Sintaxe da Divisão: = / ; Sintaxe da Multiplicação: = * ; - Código:
-
//Diminuindo o valor da Var HP em 10% HP = ((HP/100*)10)- HP; DIV e MOD:(Você vai usá-los com bem menos frequência não vai usá-los, mas é bom saber,) Div é a divisão inteira da variável, ou seja, nessa divisão teremos "resto"; Com div o valor atribuído a var é o resultado; Mod é a divisão inteira da variável, ou seja, nessa divisão teremos "resto"; Com mod o valor atribuído a var é o resto; Olhe bem o exemplo.
Divisão Completa: 9 / 2 = 4,5 Divisão Inteira: 9 / 2 = 4; sobra 1; Com Div o valor da var = 4 Com Mod o valor é = 1 ATENÇÃO: Se você quer substituir o valor da var, ao invés de alterá-lo, basta você não colocar o "" depois do =; 2°Estruturas de Verificação: Caracteres condicionais(LEIA) - Spoiler:
Em toda as estruturas de verificação e repetição, nós utilizamos caracteres lógicos que representam um tipo de comparação: Eles estão abaixo entre aspas.
MAIOR: ">": Como o nome diz, ele verifica se tal valor é maior que tal valor. MENOR: "<": Como o nome diz, ele verifica se tal valor é menor que tal valor. IGUAL: "=": Como o nome diz, ele verifica se tal valor é igual a tal valor. MAIOR OU IGUAL: ">=": Junção de IGUAL com MAIOR. MENOR OU IGUAL: "<=": Junção de IGUAL com MENOR. DIFERENTE: “! =": Verifica se tal valor é diferente que tal valor;
[b]Complementos(LEIA)- Spoiler:
Estes caracteres permitem que + de uma verificação seja feita na mesma estrutura; ajudando a diminuir o ° de condições postas em cascata.
"OR" ou "||": Se colocado depois da 1ª verificação, faz com que a estrutura verifique uma 2ª(e uma 3ª, e uma 4ª etc); A verificação será verdadeira caso uma das condições esteja certa, ou seja, se vc fez 3 verificações, e 2 delas estão erradas, a estrutura de verificação vai retornar um valro "true", já que uma das 3 estava certa.
"AND" ou "&&": Se colocado depois da 1ª verificação, faz com que a estrutura verifique uma 2ª(e uma 3ª, e uma 4ª etc);A verificação será verdadeira caso todas as condições sejam verdadeiras.
"XOR" ou "^^":
"!": Se colocado antes de uma verificação, ele nega o valor do resultado , ou seja: Se você colocar "!" antes de um "=", ele vai perguntar "não é igual a..." e não "é i gual a..."
Entendendo: Em um programa nós trabalhamos com vars, mas só atribuir valores e mostra-los não basta, muitas vezes(especialmente em jogos), nós temos que verificar certos valores para fazermos certas ações especificas; ou seja: Verificar se a tecla direcional "UP" foi clicada, para que assim, o perssonagem do jogo ande para a mesma direção por exemplo. É para isso que temos estruturas de verificação, elas verificam valores se baseando em comparações lógicas (se a variável tem valor menor que 10, ou se uma variável for igual a ''true'' etc). Aplicando:if{} else{}(Se então senão): - Spoiler:
Essa estrutura é a mais comum, sendo que existem linguagens que só possuem ela(assembly por ex.); Ela trabalha de maneira simples, ela faz a seguinte pergunta: - Código:
-
Se valor <A> é (>, <, = etc) do que valor <B> Então <Ação a ser executada> Se não <Ação a ser executada, caso a verificação seja falsa> O “if” é o “Se”, o else é o “se não”. O else é uma estrutura que complementa a verificação, ela é ativada caso a verificação retorne um valor “false”, ou seja, caso os valores comparados não atendem ao sinal. Use aspas para englobar tudo que tenha que acontecer após a verificação. - Código:
-
//1° Exemplo de IF em GML //Verifica se o HP do perssonagem é maior que o máximo permitido; if(HP >= HPMAX){ HP = HPMAX; }
- Código:
-
//2° Exemplo de IF em GML //Verifica se o HP do perssonagem esta abaixo dos 3 pontos; se sim abilitia o ataque especial, se não o desabilita. if(HP < 30){ AtaqEspecial = true; else{AtaqEspecial = false;} }
switch() case:{}- Spoiler:
O Switch age como um enorme IF, que verifica um valor quantas vezes for necessário. Cada verificação pode ter seus próprios comandos. A variavel a ser verificada esta dentro dos parenteses. Após a "{", é necessário colocar "case :{}"; na frente de case você deve colocar o valor no qual a var vai ser comparada(a variavel é comparada da mesma maneira que em um if com "="). Após o fim do codigo de um case, é muito comum colocar-se "break"(porêm não é ncessário adiciona-lo), já que "break" é um comando que faz com que o sistema pare de fazer uma ação, e assim você faz com que a verificação do switch pare de ser feita caso ja se tenha encontrado uma valor "true". - Código:
-
//Verifica a quantidade de inimigos derrotados e adiciona um novo rank baseado no numero total. switch(Kills){ case 1 :{ rank: "fraco"};break; case 5 :{ rank: "Shooter"};break; case 10 :{ rank: "Killing Machine!"};break; case 20 :{ rank: "C. Norris!"};break; } Lembre-se de que o switch faz comparações precisas! DO e While- Spoiler:
DO e while são estruturas bem parecidas, elas verificam uma expressão e repetem tudo o que estiver dentro delas até que a expresão retorne um "false". A adiferença entre as duas é que: DO: faz a verificação depois da repetição, então mesmo que a verificação de "false", as ações dentro do Do serão feitas ao menos uma vez. While: Faz a verificação antes da repetição, então as ações do while so serão executadas caso a expressão de "true". - Código:
-
Do{ HP += 1; }until(HP >=10 );
- Código:
-
while(HP <= 10){ HP += 1; }
Curiosidade(nada a ver com GML): Em Java, a estrutura DO não utiliza a palavra until, mas sim a palavra while; uma fusão das duas. For- Spoiler:
For é uma estrutura mais complexa, ele trabalha com uma var na qual ele adicionar valores, e apartir da verificação desta variavel, ele determina quantas vezes repetir suas ações. É um pouco complicado entender, então veja o exemplo. - Código:
-
//Um exemplo bem simples de um for; não tem nem nexo... For(i=0;i = 10;i+=1){ HP += i ; }
Na 1ª parte do for, nós temos a var "i", que recebe o valor de 0; é apartir do valor dessa parte que ele começa a fazer as adições para determinar o número de repetições. Na 2ª parte, nós temos a condição para parar a repetição. Na 3ª parte, nós temos o valor que "i" ira receber a cada repetição; se você for fazer de 1 em 1(eu é o mais comum), basta colocar i++. Atenção: Colocar estruturas como o Do, while e principalmente For em "Step" ou "Draw" pode(vai) dar [s]pau[/s]erro no seu jogo, o travando. Isso se deve porque esses eventos repetem toda a sua linha de codigo a cada frame, e como em media usa-se 30 frames por segundo no GM,vc tera 30 do/while/For por segundo, causando uma sobrecarga de processamento e travando o jogo..... ¬.¬ 3°Estruturas Especificas de GMLObjetos; Esqueleto do predio todo: Objetos são algo facil de se entender, porem, ele são um dos elementos mais importantes do GM, já que são ele que iniciam tudo(nem mesmo 1 linha de codigo sera iniciada sem um objeto na room para chama-la). De fato, os jogos de GM são voltados nos objetos. Objetos são os "personagens", são os "inimigos", são os "desenhadores" das HUDs, são as balas disparadas.... e por ai vai. Resumindo: Querendo ou não(porque n querer?) você vai usar objetos para muita coisa, então vamos ver algumas coisas basicas sobre eles para te ajudar e seus jogos! Valores: Objetos possuem várias variaveis locais pré-existentes(são automaticamente geradas no momento em que são criados), e é com elas que você os movimenta, define seus respectivos gráficos, area de colisão etc;(eu pessoalmente ainda n sei trabalhar com todas as funções, mas vou colocar aqui a maioria, na próxima atualização do texto, devo terminar). ID: - Spoiler:
Assim como a nossa identidade nos define e nos diferencia dos demais humanos ao nosso redor(perante o sistema, claro), o ID define os objetos uns dos outros. Eles são definidos no mesmo momento em que o objeto é colocado em uma room, ou seja, o valor da ID de um objeto pode variar de room para room. Para saber qual o ID do objeto, basta passar o mouse encima dele enquanto você estiver criando uma room, o valor do ID sera mostrado na barra inferior. Além de claro, você pode objter o ID do objeto usando a var "id". É extremamente util utilizar o ID quando se esta criando scripts, já que basta amazenar em um "argumment" o valor do mesmo, assim você podera trabalhar com um unico objeto; também ha meios de descobrir a distancia de objetos através do id e de um metodo de GM(postarei mais tarde como), e por ai vai.... Index: - Spoiler:
O index é algo bem parecido com o ID, mas ele se refere a um tipo de objeto, não a um unico objeto, ou seja: Se nós temos 10 objetos "tiro" em uma room, cada um tera seu próprio ID, mas todos os 10 teram um mesmo index, o index do objeto tiro. O index é bem util quando se quer que todos os objetos de um mesmo tipo realizem uma mesma ação.
Vspeed/ Hspeed: - Spoiler:
Estas váriaveis definem a velociade do objeto na room, podendo serem usadas para o movimento de um "perssonagem", "inimigo" e por ai vai. Vspeed = Velocidade vertical. Valores positivos fazem o objeto ir para ''baixo'', negativos para "cima". Hspeed = Velocidade horizontal. Valores positivos fazem o objeto ir para direita, negativos para esquerda. ATENÇÃO: Vspeed e Hspeed são valores que alteram a posição X e Y do objeto, porem, mecher diretamente no valor X e Y NÃO alteram na V/Hspeed; não confunda, porque isso pode causar erros no jogo.
X e Y: - Spoiler:
Estes valores definem a posição do objeto na room, se alterados em valores pequenos, eles podem ser bons meios de movimentação de um objeto, mas lembre-se de que alterando os valores X e Y diretamente, você não esta alterando a velocidade do objeto, você o esta "teleportando" pelo mapa por assim dizer. Z: - Spoiler:
A variavel Z só é usada no modo 3D, e assim como X e Y, ela define a posição do objeto no ambiente tridimenssional.
Gravity: - Spoiler:
A gravidade é uma variavel que adiciona um valor a var Vspeed ou Hspeed, ou até mesmo para as duas(explicações a baixo). Ela é usada(geralmente) em jogos de plataforma, puchado o objeto em uma direção pré determinada atráves de graus(com a função gravity_direction = ), ela trabalha de maneira indiferente à var H/Vspeed, adicionado paralelamente seus valores nela(s). Para colocar gravidade em um objeto, você pode criar um execute code no evento "Create" ou usar o vento "step"(scripts tb são uma boa!). Mais explicações sobre como usar a gravidade na parte "PRATICA".
[center] Em breve mais vars do "Object".Eu pessoalmente aprendi o que eu sei lendo o HELP do GM e com aulas de um curso tecnico que faço. Se você gostou do tuto(se n gostou tb), poste;não entendeu alguma coisa que eu disse, poste; teve duvidas? Poste também! E mais um conselho: Tente aprender a ler em inglês, vai ajudar muito :-D ..:: Créditos ::.. Smog e ..:: P.V Supreme ::..
Última edição por ..:: P.V Supreme ::.. em Qua Dez 15, 2010 11:27 am, editado 1 vez(es) | |
|