Logo Passei Direto
Buscar
Material

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Conteudista: Prof. Dr. Rafael Martins
Revisão Técnica: Prof. Dr. Rafael Martins 
Revisão Textual: Prof.ª Dra. Selma Aparecida Cesarin
 
Objetivos da Unidade:
Demonstrar o uso da ferramenta Cocos Creator;
Criar um jogo na ferramenta selecionada.
˨ Contextualização
˨ Material Teórico
˨ Material Complementar
˨ Referências
Criando um Jogo de Plataforma para Internet
Você deve conhecer e até já ter jogado o jogo Super Mario Bros., certo? 
Esse tipo de jogo é classificado como Jogo de Plataforma, e existem diversos jogos semelhantes
ao Super Mario Bros, igualmente de sucesso ou não. 
Esse tipo de jogo é um dos mais básicos para começar a desenvolver quando entramos no
mundo de desenvolvimento de Jogos Digitais, logo, é isso mesmo que você está pensando:
iremos desenvolver um Jogo de Plataforma agora.
Assim, nesta Unidade, iremos utilizar os conceitos básicos aprendidos anteriormente referentes
ao GDevelop para criarmos um Jogo de Plataforma e, no decorrer dessa aventura, iremos
aprender mais alguns recursos da ferramenta para deixar nosso jogo interessante. 
Então, agora, é a hora de arregaçar as mangas e começar o desenvolvimento. 
Você está pronto(a)?
1 / 4
˨ Contextualização
Introdução
Agora que nós já conhecemos um pouco das características do Cocos Creator e como trabalhar
com os conceitos de objetos, eventos e animações, vamos iniciar a criação de um jogo simples
de plataforma.
Clique no botão para conferir o conteúdo.
ACESSE
2 / 4
˨ Material Teórico
Site 
OpenGameArt.org 
Você poderá encontrar exemplos de personagens ou elementos de
jogos no site a seguir.
https://opengameart.org/
Um Jogo de Plataforma é um gênero de jogo eletrônico que surgiu no início dos anos 1980, no
qual um personagem percorre uma Plataforma 2D, correndo e pulando obstáculos, enfrentando
inimigos e coletando objetos que constituirão a pontuação do jogador.
O enredo do nosso jogo se passa em um ambiente de floresta e nosso personagem deverá
coletar itens disponíveis no caminho até chegar ao final da fase. 
Como estamos começando, iremos criar uma única fase. 
Na Figura 1, exibimos o nosso personagem:
Figura 1 – Personagem do jogo
Anteriormente, já foi configurado o ambiente de desenvolvimento, adicionando um novo
projeto, definindo sua resolução, adicionando um fundo (background), uma sprite que
representa a Plataforma (ground), o personagem principal (PurpleMonster) e um pouco de vida
para ele (movimentação de pula para cima e para baixo).
Para recordar, a Figura a seguir exibe o resultado do trabalho feito.
Figura 2 – Cena construída anteriormente 
Fonte: Acervo do Conteudista
Um artefato não mencionado anteriormente é o painel de depuração (Debug) que é exibido na
versão de desenvolvimento do jogo na Cocos Creator. 
Esse painel é útil pois exibe informações cruciais para o desenvolvedor, principalmente, na área
de otimização. 
No Painel, temos informações como Framerate (FPS), Draw Call (quantidade de chamadas nas
funções de desenho), quantidade de instâncias na memória, processamento de triângulos e
física, entre outros. 
Como essa parte do jogo está pronta, devemos nos aprofundar em outras áreas para que o jogo
possa ganhar corpo. 
Caso você ainda tenha alguma dúvida ou dificuldade, revise as demais Unidades. 
Personagem e Câmera
Nosso jogo está tomando forma e já conseguimos fazer o personagem pular pela Plataforma,
mas ainda não temos controle sobre ele e suas ações dentro do Jogo.
Para deixá-lo mais interessante, vamos adicionar mais um evento: controlar nosso personagem
de forma horizontal na Plataforma, de modo que ele consiga percorrer o nível.
Para controlar o personagem, adicionaremos o suporte ao teclado, utilizando as teclas “A” e
“D”, conhecidas também por guiarem os personagens em jogos Web ou PC (teclas padrão
utilizadas na Indústria).
As funções onKeyUp e onKeyDown controlam os eventos de teclado e são incluídas no contexto
do jogo com possíveis ações baseadas nessas teclas.
Primeiramente, devem ser criadas as variáveis accLeft e accRight, que são flags (variáveis de
checagem) para a aceleração para esquerda e para a direita, respectivamente:
Figura 3 – Flags para checar aceleração horizontal
Fonte: Acervo do Conteudista
Não se deve alterar a câmera nesse contexto, vez que nosso objetivo é movimentar o
personagem no eixo X. 
Com as variáveis de controle definidas, podemos escrever o Código para a movimentação do
personagem, utilizando o teclado. 
Antes de entrarmos no Código de movimentação, precisamos criar a propriedade xSpeed, que
controla a velocidade do personagem no eixo X. 
Além disso, duas chamadas são necessárias para garantir que o sistema de eventos da Cocos
Creator registre as teclas digitadas pelos jogadores.
Figura 4 – Inicialização das variáveis e listeners no método
onLoad() 
Fonte: Acervo do Conteudista
Em seguida, devem ser implementados os métodos de evento onKeyUp e onKeyDown. 
Saiba Mais 
Desde a versão 3.0 da Cocos Creator e a mudança para TypeScript,
diversas terminologias das APIs foram alteradas. Consulte o manual da
Cocos Creator disponível na seção de Materiais Complementares para
saber mais.
Nesses métodos, vamos habilitar as flags de aceleração quando o jogador pressionar a tecla, e
desabilitá-las quando ele soltar a tecla. 
Futuramente, vamos alterar a função de Update() do jogo e realizar ações baseadas nos estados
das flags.
Figura 5 – Métodos para registrar os eventos de pressionar
e soltar as teclas de controle 
Fonte: Acervo do Conteudista
Nota-se que os eventos de registro de entrada e saída funcionam de forma similar em outras
Plataformas.
Em uma Plataforma como Android, pode-se utilizar os métodos para registrar eventos em
cliques de botão ou toques na tela (assim como na Plataforma iOS).
Por fim, deve-se atualizar a função de Update(), responsável por controlar o loop principal da
nossa entidade Player. 
Para isso, vamos checar primeiro para qual direção o jogador está indo. Então, deve-se
multiplicar a aceleração atual pelo tempo em segundos naquele exato quadro (frame). 
Em seguida, vamos restringir a movimentação do personagem utilizando seu valor absoluto, e
não deixaremos que a velocidade exceda esse valor. 
Por fim, atualiza-se a posição atual do personagem:
Figura 6 – Update do personagem 
Fonte: Acervo do Conteudista
Com essa implementação, temos a base do jogador para realizar ações, como andar no cenário e
pular (além de espaço para novas implementações e testes dos alunos). 
Em seguida, veremos como adicionar elementos na fase e a implementação de mais ações.
Adicionando Elementos ao Jogo
No nosso projeto, devemos incluir, agora, novos elementos, de modo que o jogo apresente
algum desafio.
Deve-se incluir, nessa seção, elementos como inimigos, coletáveis, pontuação, efeitos sonoros
e alguns elementos de polimento, para melhorar a experiência do jogador.
Adicionando as Estrelas e o Script Game
As estrelas são os itens coletáveis do jogo, ou seja, nosso jogador precisa coletá-las para
aumentar a pontuação.
Na mecânica do jogo, as estrelas aparecem continuamente em pontos aleatórios e desaparecem
após colidirem com o jogador, elevando a pontuação.
Como descrito na Unidade anterior, deve-se utilizar o componente Prefab, pois ele atua como
objeto de suporte para estruturas que são criadas continuamente, utilizando a memória de
forma eficiente.
Para começar, devemos utilizar a sprite star.png, localizada na pasta “assets/textures”.
Vamos arrastar a sprite star.png para a hierarquia da cena, apenas para adicionar o script que
deve gerenciar seu comportamento.
Depois da criação do Prefab, podemos deletar da hierarquia, não sendo necessário mantê-lo na
cena e nem alterar propriedades de transformação. 
Para criar o script, deve-se seguir a rota: clicar com botão direito na pasta scripts → Create →
TypeScript → New Component e nomear para Star. 
Em seguida, na aba Properties, vamos adicionar o script Star para herdar o
comportamento que
desejamos para o prefab. 
Por hora, o script Star deve apenas guardar uma variável para o raio, como exibe a imagem a
seguir:
Figura 7 – Criação do script Star 
Fonte: Acervo do Conteudista
Na aba de propriedades, vamos adicionar o valor de 60 a variável pickRadius. 
O próximo passo é arrastar o objeto star para a pasta Assets e deletar da hierarquia. Dessa forma,
o Prefab é criado. 
Antes disso, vale checar a estrutura final do nosso prefab, como demonstra a imagem a seguir:
Figura 8 – Propriedades do Prefab Star 
Fonte: Acervo do Conteudista
O próximo passo é adicionar um script para o jogo (Game), criando referências dos nossos
elementos de jogo e possibilitando a geração de estrelas de forma dinâmica. 
Da mesma forma como criamos os scripts anteriores, vamos criar um script chamado Game. 
Esse script será nosso gerenciador, e fará o controle dos objetos essenciais para o ciclo de vida
do nosso jogo, como iniciar a partida, controlar a pontuação e checar as condições de vitória e
derrota. 
Vamos adicionar a referência dos nossos objetos principais, de modo que possamos iniciar a
geração das estrelas no cenário.
Para isso, devem ser adicionadas as propriedades de Plataforma (ground), estrela (starPrefab) e
jogador (Player), assim como variáveis para controlar as durações mínimas e máximas das
estrelas na tela.
Figura 9 – Referências para os objetos principais do jogo 
Fonte: Acervo do Conteudista
Os elementos do jogo são declarados propriedades (@property) para que possamos acessá-los
via editor no componente que guarda o script Game. 
Primeiramente, vamos adicionar o script Game no Canvas, dentro da hierarquia. 
O próximo passo é arrastar os objetos ground, star e Player para as propriedades expostas no
script e, por fim, determinar o valor das variáveis minStarDuration e maxStarDuration para 3 e 5,
respectivamente.
Figura 10 – Script Game.ts adicionado como componente
do Canvas 
Fonte: Acervo do Conteudista
Finalmente, vamos gerar as estrelas em posições dinâmicas. 
Vamos definir uma coordenada no eixo Y para o chão (ground), que funciona como ponto de
âncora para determinarmos onde está localizada sua altura.
Como a âncora está localizada no centro da imagem, adicionamos, na altura, metade do valor da
altura da imagem.
Em seguida, criaremos duas funções: (1) spawnNewStar(), para instanciar os prefabs de estrela e
(2) getNewStarPosition(), para definir as posições aleatórias dentro das chamadas de criação de
estrelas no primeiro método.
Utilizamos o método getComponent para recuperar o script de referência do Player e invocarmos
suas funções.
Ao clicar no botão Preview do editor da Cocos Creator, o resultado exibirá uma estrela gerada em
uma posição aleatória.
Coletando Estrelas
Nosso personagem, agora precisa coletar as estrelas que aparecem em posições aleatórias no
Canvas. 
Para isso, é necessário calcular a distância do personagem e das estrelas e, assim, fazê-las
desaparecer. 
Saiba Mais 
O método getComponent da Cocos Creator funciona de forma similar ao
método GetComponent da Engine Unity.
Para conseguir esse efeito, deve-se obter uma referência do componente Player e salvar a
referência do jogo no componente de estrela (Star). 
Quando coletamos uma estrela, precisamos destruí-la do Canvas e criar uma nova instância para
que ela seja gerada em uma posição aleatória. 
O método getPosition() retorna à posição do Node (um vetor de 2 dimensões). 
Se a distância é menor do que a distância determinada pelo raio (variável pickRadius), então, o
código dentro da função Update é executado.
Para descrever esse comportamento, utilizamos o código a seguir, implementado no arquivo
Star.ts:
Figura 11 – Implementação da distância e coleta da estrela 
Fonte: Acervo do Conteudista
Pontuação
Precisamos adicionar um elemento que atenda às condições de vitória do jogo (ou simplesmente
um feedback positivo), do contrário, não faz sentido nosso personagem apenas navegar pelo
cenário e observar estrelas aparecendo. 
Para contemplar essa mecânica, vamos adicionar o elemento de pontuação, um dos artefatos
mais básicos desde que os Jogos Digitais existem.
Para adicionar a pontuação, vamos precisar de um componente de texto.
Na Cocos Creator, esse componente é o Label e, assim como outros componentes de interface,
também é um Node.
Na hierarquia (Node Tree), clique com o botão direito em Canvas e faça a rota Create → UI
Component → Rich Text (ou se pode utilizar 2D Object – Label).
Isso fará com que um Label seja adicionado na hierarquia. Renomeie o Label para score e o
posicione na tela, em uma região fora de onde ocorre a interação do personagem com as
estrelas.
Figura 12 – Adicionando Label score 
Fonte: Acervo do Conteudista
Nosso objetivo agora é computar as estrelas coletadas e adicionar a pontuação no componente
de texto criado. 
Para isso, vamos criar uma variável do tipo UIComponent.RichText e, em seguida, criar e
inicializar uma variável score = 0, e criar um método para incrementar e atualizar essa pontuação
a cada estrela coletada (Figura a seguir):
Figura 13 – Atualizando pontuação 
Fonte: Acervo do Conteudista
Também devemos invocar a pontuação da classe Star, logo após a geração de uma nova estrela
(Figura a seguir):
Figura 14 – Chamando o método de atualização de
pontuação 
Fonte: Acervo do Conteudista
Para finalizarmos o mecanismo da regra de pontuação, precisamos adicionar uma condição de
derrota.
Do contrário, o personagem coletará estrelas infinitamente, o que pode tornar o jogo monótono
ou sem desafios. 
Na classe Game, vamos adicionar uma lógica para fazer com que as estrelas só fiquem visíveis
por um determinado tempo, forçando o jogador a mover o personagem de forma mais ágil. 
Figura 15 – Lógica final de geração de estrelas 
Fonte: Acervo do Conteudista
Declaramos variáveis para um acumulador de tempo (timer) e a duração da estrela
(starDuration).
Inicializamos com 0 as variáveis para começar a contagem no método Update().
Em seguida, no final do método spawnNewStar(), adicionamos uma lógica para gerar um tempo
aleatório para cada estrela gerada.
No método Update(), adicionamos a lógica de derrota, que consiste em comparar o tempo
acumulado com o tempo de duração da estrela atual.
No caso de o tempo ser menor do que a duração da estrela, invocamos o método gameOver(),
que encerra o jogo atual e inicia um novo.
Por fim, o método de gameOver() encerra as ações do personagem, no caso, sua função de pulo
(jump/tween).
Efeitos Sonoros
Como parte essencial de um projeto de jogo, a inclusão de música e dos efeitos sonoros se faz
necessária, tendo em vista incluir feedbacks e mecanismos em que o jogador fique mais imerso
na experiência. 
Em nosso projeto, vamos adicionar alguns efeitos sonoros, utilizando componentes de áudio da
Cocos Creator.
O componente que vamos utilizar é o AudioSource, que faz parte da engine de áudio da Cocos
Creator. 
O AudioSource é responsável pelos controles básicos para reproduzirmos um arquivo sonoro,
como tocar, pausar, resumir e parar, e esse arquivo é representado por um elemento chamado
AudioClip.
O primeiro passo é selecionar, na hierarquia (Node Tree), o objeto Canvas e adicionar um
componente AudioSource.
Criado o componente, devemos arrastar o arquivo “assets/audio/score.mp3” para o componente
Clip¸ nas propriedades do nosso objeto Canvas/AudioSource, como exibido na imagem a seguir:
Figura 16 – Adicionando um arquivo sonoro ao AudioSource 
Fonte: Acervo do Conteudista
Para tocarmos o arquivo sonoro selecionado, basta adicionarmos uma chamada utilizando a
função getComponent(AudioSource).play() para reproduzir o efeito no método gainScore(),
utilizado para incrementar a pontuação:
Figura 17 – Chamando método Play() da AudioSource 
Fonte: Acervo do Conteudista
O mesmo procedimento pode ser realizado para executarmos o efeito sonoro de pulo para o
personagem. 
E vamos realizar, ainda,
o mesmo procedimento para o objeto Player na hierarquia. 
Saiba Mais 
Você pode explorar as funcionalidades do componente AudioSource,
habilitando loop, implementando efeitos e outras funcionalidades
disponíveis na documentação oficial da Cocos Creator, presente nos
Materiais Complementares.
Arrastar o arquivo “assets/audio/jump.mp3” para o AudioSource garante acesso à execução do
efeito sonoro para o pulo do personagem. 
Depois disso, devemos realizar a criação de um método para fazer a chamada da função play(),
utilizando a estrutura já criada anteriormente de Tween.
A vantagem de usar o componente Tween é a possibilidade de adicionar sequências de ações,
não só visuais, mas também outras chamadas e callbacks implementadas para o objeto em
questão.
Figura 18 – AudioSource no objeto Player para execução do
efeito sonoro de pulo 
Fonte: Acervo do Conteudista
E, por fim, a implementação da chamada do som dentro do tween na classe Player.ts (Figura a
seguir):
Figura 19 – Implementação do efeito sonoro de pulo no
personagem 
Fonte: Acervo do Conteudista
Em Síntese 
Com isso, terminamos essa Unidade. Agora, caberá a você explorar os
diversos recursos da Cocos Creator e adicionar novas funções ao nosso
jogo, para que ele fique mais interessante e desafiador. 
Por fim, parabéns! Você criou seu primeiro jogo na engine Cocos
Creator. 
Indicações para saber mais sobre os assuntos abordados nesta Unidade:
  Livros  
Let’s Build a Multiplayer Phaser Game 
LODRIGUEZ, O. Let’s Build a Multiplayer Phaser game. [s.l.]: APress, 2016.
  Vídeo  
Cocos Creator for Beginners – Part One 
3 / 4
˨ Material Complementar
Cocos Creator For Beginners - Part One
https://www.youtube.com/watch?v=JSOXYPqZ1-8
  Leitura  
Cocos Creator 3.6 User Manual
Clique no botão para conferir o conteúdo.
ACESSE
Quick Start: Making your First Game
Clique no botão para conferir o conteúdo.
ACESSE
https://docs.cocos.com/creator/manual/en/
https://docs.cocos.com/creator/manual/en/getting-started/first-game/
BUCHARD, E. The web game developer’s cookbook: using JavaScript and HTML5 to develop games.
S.l.: Addison-Wesley, 2013.
FORBELLONE, A. L. V.; EBERSPACHER, H. F. Lógica de programação: a construção de algoritmos
e estrutura de dados. 3. ed. São Paulo: Pearson Prentice Hall, 2008. 
MEYER, J. O guia essencial do html5: usando jogos para aprender HTML5 e Javascript. Rio de
Janeiro: Ciência Moderna, 2011. 
SCHELL, J. A arte de game design: o livro original. São Paulo: Campus, 2011.
4 / 4
˨ Referências

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Mais conteúdos dessa disciplina