sábado, 8 de setembro de 2012

Aula 1 de GML

Entendendo o Funcionamento do GML: As Estruturas do GML.

Objetivo:
 Entender como definir os códigos em GML.
Dificuldade: Depende da sua leitura e atenção.
Ferramenta: GM7 ou GM8.

Esta aula também é teorica, mas vamos introduzir alguns aspectos básicos do GM, então você deverá acompanhá-la usando o programa dessa vez (e pelas próximas aulas também).

(Obs: Como dito, essas aulas serão um pouco da tradução do Manual do Game Maker/Ajuda do Game Maker, somado a interpretações e testes próprios meus e dos meus amigos que estarão fazendo as aulas também)


Usando o GML no seus Projetos:

Para começar, temos que saber onde digitar os nossos códigos de GML.
Existem 3 Lugares no GM que eles podem ser usados:

Na Pasta Scripts, você pode criar um novo script. (Scripts só servem para GML, e eles trabalham melhor que as outras funções, pois são lidos primeiro. Portanto sempre que possivel os usaremos)
Nos Objetos, na Aba Control existe um ícone de 'papelzinho' que tem o nome Piece of Code (PT: Peça/Pedaço de Código). Para usá-los basta você arrastar para dentro de um Evento.
Nas Rooms. Na Aba Settings das rooms existe um botão com o nome Creation Code, lá você digitar códigos de GMl que você quer que aconteçam quando aquela room especificamente é criada.

Agora que sabemos como usar as ferramentas de GML que o Game Maker nos disponibiliza, vamos criar um novo Obj e chamá-lo de Hero, então nele adicione um Evento Step.
Vá na Aba Control e arraste um Piece of Code para dentro do Evento Step.
Agora você poderá abrir o script e ver uma página em branco. Deixe ele quieto aí até que você precise usá-lo.

Por hora continuemos o estudo.

Estruturas de GML: Program, Assignment, Expressions e Statements.


Program - Programa

Em GML chamamos de 'Program' tudo que é declarado dentro de um script entre os simbolos { }.
O arquivo de ajuda do Game Maker nos diz o seguinte sobre Programas:

"Um programa consiste em várias instruções, chamadas Statements (PT: Declarações). Um programa deve começar com o Símbolo "{" e terminar com o Simbolo "}" (Nós aqui na Aula chamaremos eles de Start of a Block e End of a Block, respectivamente, como o Drag&Drop homônimo). Entre esses simbolos ficam os Statements. Os Statementsdevem ser ser separados pelo Simbolo ";" (Na verdade não é obrigatório, mas não usar causa bugs nos códigos muito mais frequentemente).
Então a estrutura global de qualquer Programa é:

CODE: 
{
<statement>;
<statement>;
...
}

Existem vários tipos de Statements, que veremos a seguir."
- Ajuda do Game Maker, por Mark Overmars


É bem fácil compreender o significado de um Program.
Então agora, quando o GM acusar um erro no seu script dizendo "Program Ends before the end of the Code" (PT: O Programa acaba antes do fim do Código), você vai entender o que ele quer dizer.
Nesse caso o GM está dizendo que o Programa acaba "}" mas tem códigos depois dele, que deveriam estar dentro dele ou em outro lugar, e isso causa o erro.


Assignments - Atribuições

Assignments são as operações que você coloca dentro dos Statements ou Programs. Assignments servem para mudar valores de variaveis.
Os Assignments devem ser sempre seguido de uma Expres​sion(veja a seguir), vamos mostrar três exemplos de Assignments, como se fosse em um Evento Create de um Obj:
Exemplo 1
CODE: 
direita=true;

Exemplo 2
CODE: 
inimigo_inicial_position=hero.x+128;

Exemplo 3
CODE: 
divisor=pi;

Veja que Assignments podem ser qualquer coisa: a definição true/false no Exemplo 1, uma definição de posição de objetos como no Exemplo 2, ou até operações matemáticas que envolvem trigonometria, como no Exemplo 3.
A estrutura das Assignments é sempre esta:
CODE: 
<variavel>=<expressão>

Expressões podem ser simples, como true/false ou um número, até coisas realmente complexas, como funções 3D, etc.
Expressões podem variar muito, e as Variaveis mais ainda! ("talvez seja por isso que se chamam VARIAVEIS né DHarrison?! Dããã")
Por isso separamos uma aula só para Variaveis, que será a próxima aula.


Expressions - Expressões

São as expressões que fazem realmente a mágica acontecer no Game Maker. Elas definem o que deve ou não ser feito, e são importantíssimas.
Elas podem ser Números Reais (como 1, 4, 100), números Hexadecimais, começando com o Simbolo "$" (Como cores por exemplo, $f42525. Essa é a cor Vermelho em Hexadecimal). Também podem ser Strings (Frases) quando colocadas entre 'aspas' ou "aspas duplas", e essas frases podem ter multiplas linhas (procure aulas de Draw Text para aprender mais sobre isso).
Para Expressions usamos os seguintes Binary Operators (PT: Operadores Binários), listando os de maior prioridade no topo da lista (as aspas não fazem parte do código, exceto se especificado o contrário):

1 - "&&" "||" "Happy": combinam valores Boolean* (&& = and, || = or, Happy = xor)
*Bool.e.an (adj) diz-se do sistema combina­tório lógico (álgebra booleana) que representa simbolicamente relações entre entidades. Em outras palavras, esses simbolos agem na lógica da programação de GML, por exemplo:
CODE: 
If (keyboard_check(vk_right)) || (keyboard_check(vk_numpad6))

ou pode ser também escrito:
CODE: 
If (keyboard_check(vk_right)) or (keyboard_check(vk_numpad6))

Nos dois casos, declaramos o começo de um código, onde SE (if) apertar a tecla Seta Direita OU Número 6 (Teclado Numérico), vai acontecer algo (que não definimos).
Se não tivesse sido usado o ||, teriamos que declarar if 2 vezes, uma para a Seta Direita e outra para o Numpad 6.

2 - "<" "<=" "==" "!=" ">" ">=": Comparações, resultam em True(1 no valor binário, que seria "SIM/VERDADEIRO") ou False (0 no valor binário, que seria "NÃO/FALSO").
As comparações são poderosas, elas que fazem as coisas funcionarem e serem definidas.
Explicando o que é cada conjunto de Simbolos:
< - "Menor que"
<= - "Igual ou Menor que"
== - "Exatamente Igual"
!= - "Diferente" (O simbolo ! no GM significa não)
> - "Maior que"
>= - "Igual ou Maior que"
Sem mais.

3 - "|" "&" "^": Operadores Bitwise** (| = bitwise or, & = bitwise and, ^ = bitwise xor
**Explicação Sobre bitwise operators, retirado do site www.guj.com.br 
1) O que são Bitwise Operators?
Re: Bitwise operators são operadores que manipulam bits, deslocando pra esquerda, ou pra direita, invertendo, fazendo operações lógicas... 
2) Para que servem?
Re: Servem para você realizar operações binárias com variáveis numéricas Aqui e acolá aparecem coisas que a gente precisa usar esses operadores.


4 - "<<" ">>": Operadores Bitwise (<< = shift left, > > = shift right). Sem Explicação Temporariamente.
---
(Nunca usei Bitwise, se alguém souber explicar melhor essa parte post aqui que eu edito) 
---

5 - "+" "-": Adição e Subtração. Não precisa explicar né? Very Happy

6 - "*" "/" "div" "mod": : Multiplicação, Divisão, "Integer Division", and Módulo.
Essa Integer Division, segundo o que pesquisei num fórum de C++, é uma divisão onde os números decimais/fracionais são descartados.
Por exemplo, 11 dividido por 4 é igual a 2.75. Mas num Integer Division será apenas 2, pois o número fracional é descartado.
Ou seja, é um Operador muito bom se você quer trabalhar apenas com números inteiros
O Módulo é o valor absoluto de uma grandeza. É apenas o algarismo que representa tal grandeza, sem o sinal.
Para calcular o modulo, tire a raiz quadrada do quadrado(²) de um número.
exemplo:
CODE: 
o modulo de 3 é 3, pois raiz (3^2) = raiz (9) = 3
o modulo de -3 é 3 tb, pois raiz ((-3)^2) = raiz (9) = 3

Em termos geométricos, o modulo é distancia entre dois pontos ou o comprimento do vetor que liga esses dois pontos.
Obs: Isso não é código de GML, só coloquei ali pra ser melhor visualizado.

Esses são os Operadores Binários que usamos nas expressões. Também há outros Operadores, que não são binários:
!: Não, torna True em False, e False em True.
-: Nega o Próximo Valor.
~: Nega o Próximo Valor Bitwise.

Você pode usar como valores das expressões: variaveis, números ou scripts que retornam algum valor.
Comparações pode ser usadas para Strings (Frases), dessa forma:
CODE: 
 str = 'Olá Mundo'

Definimos a variavel str como a frase Olá Mundo.

E Sub-expressões podem ser colocadas dentro de parênteses ( ).
Como esse exemplo:
CODE: 
 x = 23*((2+4) / sin(y))

Tradução: x = 23 multiplicado por ((2+4) dividido pel seno de (y))

Todos Operadores trabalham para formar Valores Reais.


Sei que você já está cansado de ler, por isso vamos finalizar a aula assim que acabarmos uma breve explicação sobre Statements.


Statements - Declarações


Como o nome diz, Declarações declaram algo. (Capitão Óbvio presente no Tópico)
Mas é isso mesmo, usando as declarações voce indica o que deve acontecer, e com as expressões como deve acontecer.
Por exemplo:
CODE: 
if keyboard_check(vk_enter)
{
pause_game
}

Tradução: SE apertar Enter, o Jogo Pausa.

"Bom, mas onde está o tal Statement nisso?"
O Statement é o pause_game.

Vejamos um breve exemplo para melhor compreendimento:
CODE: 
if (CONDITION)
{
    STATEMENT;
};

Esse é o IF Statement, que estudaremos na Aula 3.
IF - é um "Declarador", ele não é a Declaração (Statement) em sí, mas é ele que define ela.
CONDITION - é para saber sobre qual condição IF vai declarar algo. No caso acima, a condição era Apertar a Tecla Enter.
{ Começa um Programa.
STATEMENT - Aqui vai nossa Declaração, IF faz a checagem da CONDITION, se CONDITION fizer o que IF pede, IF vai declarar o que estiver no STATEMENT, no caso acima, pause_game para pausar o jogo.
} Fecha o programa, pois ja foi feito o que deveria ser feito.

Isso é um Statement. Uma Declaração.

Existem os seguintes "Declaradores"
IF
IF/ELSE
FOR
FOR i
WHILE
DO/UNTIL
SWITCH
WITH

Esses são os principais, e mais complexos, que estudaremos nas próximas aulas.
Temos também CONTINUE, BREAK, EXIT e REPEAT. Que são mais simples e serão explicados durante as outras aulas.


UFA! Acabou!
Espero que tenham gostado, e abaixo seque um Link para o Aplicativo de Revisão da Aula 1.


Na próxima aula: Variáveis, Variáveis Globais, Arrays e Built-in Variables. Por Markituh.

Aqueles que conhecem GML e quiserem contribuir, favor ver o tópico do projeto: Projeto Aulas de GML 


Usei todo meu ki nessa aula hoje, então por hoje é só pessoal!
Aguardem as próximas aulas que serão muito em breve.

Atencionsamente, DHarrison


EDIT: O Aplicativo de Revisão foi postado na Parte 1, pois ele não demonstra nada do que é dito nessa parte da aula, aqui é puura teoria ;)


Nenhum comentário:

Postar um comentário