Programação de Jogos com o Construct - Parte TeóricaIntroduçãoO que é programação?O que é programação de jogos?O que é o Construct3?Tipos de ObjetosVisual x LógicoTipos de Objeto (Object Type)Tipos de Objeto e InstânciasVariáveisO que é uma variável?Variável de instânciaVariáveis GlobaisAcessando variáveis e executando funçõesBlocos de eventosO que é um evento?Tipos de eventosJuntando eventosEvento do tipo AND / EEvento do tipo OR / OUInvertElse (Senão)Subeventos
Programação é o uso de uma linguagem que o computador possa compreender de forma a resolver problemas.
Um programa é uma série de passos ou instruções que devem ser executados pelo computador.
O que pode ser feito com programação?
https://www.programacaoprogressiva.net/2012/08/serie-comece-programar-2-o-que-e.html
A programação de jogos é uma sub-área da programação que lida com a criação de jogos eletrônicos. Para fazer um jogo você precisa pensar em coisas como:
No Construct, a construção do jogo é dividida em duas partes
Uma parte visual e uma parte lógica
Essas partes podem ser acessadas por essas duas abas:
Chamamos a parte visual de Layout e a parte lógica de Event sheet
Todo jogo é feito pela manipulação de instâncias e tipos de objeto
Todo tipo de objeto é algo do jogo que tem:
Exemplos:
Um objeto do tipo Sprite:
Um objeto do tipo Text:
Alguns tipos de objeto são usados para funções específicas do jogo, nesse caso eles não tem uma representação visual. Usamos eles apenas para executar ações ou testar coisas
São tipos de objeto como:
Um tipo de objeto é como se fosse um molde ou base.
Eles ficam listados em Project
> Object Types
:
Considere que no seu jogo o player vai poder coletar moedas:
Imagine que você precisa colocar 100 moedas no jogo: todas elas valem a mesma quantidade de pontos, tem a mesma imagem e se comportam da mesma forma
Se todas elas são exatamente iguais, faz sentido criar um tipo de objeto para cada moeda, definir a mesma imagem, os mesmos valores e o mesmo comportamento?
A resposta é: não
Para isso você precisa entender a diferença entre um tipo de objeto e suas instâncias
Um tipo de objeto é uma base para criar objetos, enquanto uma instância é o resultado do uso da base
Você pode pensar no tipo de objeto como a planta de uma casa você define coisas fixas com ela, quantas são as paredes, portas, etc.
Essa planta pode ser utilizada para construir várias casas, elas são bem parecidas, mas podem ter coisas diferentes como a cor e o número da casa, mas não o lugar onde fica uma das paredes.
Um tipo de objeto diz quais coisas uma instância pode ter, uma instância é a realização dessa base, da planta da casa.
Uma planta diferente diz respeito a um conjunto de casas diferentes
Se você pensar que a planta de uma casa é um tipo de objeto, as casas que você pode fazer a partir dessa planta são as instâncias
Se você pensar que o projeto (desenho) de uma caneta é um tipo de objeto, quando alguém usa esse desenho para fazer uma caneta de verdade, está criando uma instância
Uma caneta de verdade poderia, por exemplo, ter diferentes cores. Mudamos a propriedade, mas não o plano que define como uma caneta geral é.
O tipo de objeto define coisas fixas como:
A caneta tem propriedades que podem mudar de acordo com a caneta:
O tipo de objeto pode preencher esses lugares com valores padrão
Uma instância pode trocar esses valores que podem mudar. Se você não disser um novo valor, o valor padrão será mantido:
Uma instância com as propriedades:
Será:
Como não dissemos qual a cor da tampa, o valor padrão foi colocado.
Do mesmo jeito, no seu jogo, para colocar as moedas você só precisa criar uma moeda que servirá de base para todas as outras esse será o tipo de objeto, as moedas criadas a partir desse "molde" serão as instâncias
O tipo de objeto diz quais são os valores que uma moeda pode ter e coloca alguns valores padrão, quando criamos uma instância podemos:
Uma variável é um campo no nosso jogo que guarda um valor que pode mudar ao longo do jogo.
Pode ser um número, um texto ou valor booleano (verdadeiro/falso)
Por exemplo, no jogador, a velocidade máxima é guardada numa variável chamada Max Speed
, você pode mudar o valor inicial nas propriedades ou mudar usando a programação (quando ele pegar um certo item poderá andar mais rápido por exemplo)
Você viu como existe uma diferença entre um tipo de objeto e uma instância isso pode ficar mais claro com o entendimento do que é uma variável de instância.
No exemplo das moedas, você viu que elas tinham um atributo vale pontos, que indica quantos pontos uma moeda vai dar ao jogador.
Frequentemente precisamos criar esses "espaços" para guardar os valores que nós queremos, essas são as variáveis de instância
Por exemplo, para o jogador queremos guardar:
Precisamos criar variáveis de instância pois esses valores não existem ainda: eles não vêm com o Tipo de Objeto Sprite ou com o Comportamento Plataforma
Vale lembrar que esses valores estão associados a instância jogador, por isso são variáveis de instância
No caso do inimigo, que tem a variável de instância Hitpoints
(vidas). Cada instância de inimigo pode ter um número diferente de vidas, se removermos um deles o número na quantidade de vidas também será removido.
Quando eu quiser consultar o valor Vidas
terei que dizer de qual inimigo estou falando
Variáveis globais funcionam da mesma forma como as variáveis de instância, mas elas não estão relacionadas com objetos do jogo. Elas existem enquanto o jogo estiver aberto.
Algumas vezes precisamos usar fórmulas para fazer certas atividades no nosso jogo. Lembre-se de que:
Tudo que for escrito e não estiver entre aspas: " ... "
será interpretado como um comando
Para acessar valores dentro de instâncias use: NomeObjeto.NomeVariável
Números com vírgula como: , devem ser representados com o ponto 0.35
Para juntar textos e números coloque um &
entre eles: "bom dia para " & 0 & " pessoas"
irá resultar em: bom dia para 0 pessoas
Se você escrever o nome de uma variável, ele será trocado pelo valor: "Você tem " & Player.moedas & " moedas"
. Se o jogador tiver 20 moedas esse valor será trocado em Player.moedas
resultando em: Você tem 20 moedas
Quando fazemos algo do tipo umNome(valor1, valor2, ...)
estamos usando uma função, o construct vai usar os valores que você deu para realizar um cálculo (dependendo do nome da função) e essa parte será trocada pelo resultado desse cálculo
maior(2, 3)
isso será trocado por 3
, já que o construct irá calcular que 3 é maior que 2 e irá trocar maior(2, 3)
por esse resultado
Um evento é uma condição ligada a um ou mais objetos do jogo, por exemplo: no game, o teclado será representado por um objeto do tipo Keyboard, pois são os objetos que podem lançar eventos, assim, podemos no código monitorar por algum evento específico, nesse caso, pode ser quando alguma tecla for pressionada ou solta, então podemos executar alguma ação quando esse evento ocorrer.
Lembre-se:
Existem dois tipos de eventos
Eventos que não começam com On
Eventos que começam com On
Você pode precisar que mais de um evento esteja acontecendo ao mesmo tempo para executar algum bloco. Quando existe mais de uma condição e precisamos que todas sejam verdadeiras, usamos o AND
Inserindo uma nova condição
Outra forma de fazer isso
Um bloco do tipo AND fica dessa forma
Num evento do tipo OR , o bloco é executado quando uma ou mais condições são verdadeiras.
Para fazer um bloco OR você precisa começar por um do tipo AND e usar a opção Make OR block
Ele ficará assim:
Você pode torná-lo um bloco AND usando a seguinte opção:
Caso você queira que o bloco seja executado quando uma condição não for verdadeira, use a opção invert
Um bloco com um invert fica assim:
Perceba que na imagem existe uma junção do bloco AND com o invert nesse caso, você pode ler essa condição como:
*"Execute as ações a seguir **se** A tecla W do teclado estiver sendo apertada E o player Não estiver pulando"*
Um bloco do tipo else é executado quando o que foi testado em um evento não ocorreu: você pode fazer o teste de algo e o seu inverso em um mesmo bloco.
Um bloco else é criado dessa forma:
O resultado será:
Você pode ler o else como: Execute essa ação se algo acontecer, caso contrário execute outra ação
Subeventos são maneiras de condensar o código e evitar repetição. Imagine que você tem que programar o seguinte:
Se o jogador encostar numa alavanca um som deve ser tocado, se ele apertar a tecla x
a alavanca deve mudar de posição
Sem o uso de sub eventos a solução poderia ser assim:
xxxxxxxxxx
SE (jogador está encostando na alavanca):
toque o som
SE (jogador está encostado na alavanca E a tecla x está sendo apertada):
mude a posição da alavanca
Veja que uma das condições se repete, podemos condensar isso usando um subevento da seguinte forma:
xxxxxxxxxx
SE (jogador está encostando na alavanca):
toque o som
SE (tecla x está sendo apertada):
mude a posição da alavanca
Para criar um subevento use: