Jogos em Cordova: Desenvolvendo um jogo 2D com Enchat.js – Parte 1
Na primeira parte do curso iniciamos a implementação do nosso jogo “Fuga dos Dragões” com a inclusão do plano de fundo animado e do personagem principal (dragão) ao mesmo. Entendemos não só o que tange à configuração e instalação do Apache Cordova e do Enchant.js, mas também como ambos os frameworks se comportam em conjunto com conceitos como orientação a objetos, animação, canvas, bem como performance e superposição de imagens. Tais conceitos não só moldam o universo de games 2D na web como também definem novos fluxos de execução que serão totalmente regidos pela criatividade dos desenvolvedores e suas equipes.
Neste artigo iremos tratar de finalizar o jogo por completo, adicionando os personagens inimigos, os marcadores de pontuação e as transições de telas para quando o jogador for atingido e o jogo precisar exibir uma mensagem de Game Over com a opção de começar uma nova partida. Para essa implementação em especial, destaca-se o uso que faremos da API nativa do Cordova para salvar as informações referentes ao melhor resultado atingido pelo jogador naquele dispositivo em específico, dado este que poderá ser usado nas partidas futuras exibindo para o mesmo qual a sua melhor pontuação desde que começou a jogar.
Além disso, algumas definições são sempre menos vistas em tutoriais desse estilo, tais como a criação de menus, ou a definição de rotas que o jogador pode seguir atreladas a níveis de dificuldade que vão aumentando com o passar do tempo. Ao final faremos um tour pelos principais plugins disponíveis para o framework e você poderá ver que tipos de tecnologias podem ser acrescentadas ao seu projeto para ajudar a maximizar o poder de criação nos seus jogos.
Criando os inimigos
Após a implementação do dragão e toda a lógica envolvida em exibi-lo na horizontal e movimentá-lo na vertical, você já tem em mãos uma ligeira impressão de como esse código poderá ser reaproveitado para construir a lógica dos inimigos. Assim como para os demais objetos desenháveis que representamos no código anteriormente, o Inimigo também deverá ter a sua própria classe. Logo, para isso, adicione o código contido na Listagem 1 ao final do nosso arquivo main.js observando as semelhanças com o objeto Dragao, por exemplo, bem como as sobrescritas de métodos na herança estabelecida.
Listagem 1. Criando a classe de Inimigo e adicionando ao main.js.
01 /**
02 * Classe Inimigo
03 */
04 var Inimigo = Class.create(Sprite, {
05 /**
06 * O inimigo que o dragão deve evitar
07 */
08 initialize: function(faixa) {
09 Sprite.apply(this,[48, 49]);
10 this.image = Game.instance.assets['res/bola-fogo.png'];
11 this.rotationSpeed = 0;
12 this.setFaixa(faixa);
13 this.duracaoAnimacao = 0;
14 this.addEventListener(Event.ENTER_FRAME, this.atualizar);
15 },
16 });
Antes de entendermos a listagem é preciso que saibamos como o código de pintura dos objetos de inimigo irá se comportar. A ideia é que dividamos a tela em três “faixas” horizontais que tomarão todo o espaço vertical da tela do jogo. Cada faixa terá um identificador e servirá para ações como definir onde o próximo objeto será impresso, bem como criar certas regras que impossibilitem mais de um objeto ser impresso na mesma faixa ao mesmo tempo. Após um objeto ser impresso, automaticamente setamos um tempo x que será contado para a impressão do objeto posterior e assim sucessivamente. Isso irá nos poupar o trabalho de ter de criar divisões verticais também para definir onde cada objeto deveria ser impresso sem que essa repetição ocorresse.
Perceba que logo no início do código estamos usando uma estrutura ainda não vista no artigo, a chamada ao método create() com a classe Sprite (do Enchant.js) passada como primeiro argumento. Isso por que a classe Inimigo será uma subclasse de Sprite e esta irá nos ajudar a definir as configurações de posicionamento dos objetos através do parâmetro faixa que recebemos no construtor do método initialize. Na linha 9 temos a aplicação das dimensões da imagem do inimigo. Perceba que estamos usando apenas a imagem da bola de fogo (linha 10), mas mais na frente configuraremos o jogo para lidar com mais personagens randomicamente. Em seguida, definimos a velocidade de rotação para zero (linha 11), uma vez que o personagem fará uma movimentação vertical retilínea e que necessariamente não poderá ter desvios. Após isso, configuramos a duração da animação inicialmente com zero também, mas esse dado será atualizado mais à frente. Note que esses tipos de configurações servem somente para declarar os nomes dos atributos que precisaremos nesse objeto, mesmo que seus valores estejam zerados.
Na linha 14 temos a adição do evento de ENTER que, na verdade, irá capturar o momento em que devemos atualizar o objeto, de fato. Note que ainda não implementamos duas outras funções que estão sendo usadas na função initialize: a função setFaixa() que definirá a posição do objeto de acordo com o seu número de faixa, e a função atualizar() que será chamada a cada novo frame impresso na tela.
Agora adicionemos o código relativo à primeira função das duas (Listagem 2).
Listagem 2. Adicionando a função setFaixa() à classe Inimigo.
01 setFaixa: function(faixa) {
02 var jogo, distancia;
03 jogo = Game.instance;
04 distancia = 90;
05
06 this.y = jogo.height / 2 - this.height / 2 + (faixa - 1) * distancia;
07 this.x = ...
Confira outros conteúdos:

Programador Mobile

Desenvolvimento de aplicativos para...

Conceitos básicos para programar para...

Faça a sua matrícula
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 64,90
Total: R$ 778,80
Garanta o desconto
- Formação FullStack Completa
- Aprenda Marketing digital, automações e IA para Devs
- Módulo como ganhar dinheiro com Tech
- +10.000 exercícios gamificados
- +50 projetos reais com acompanhamento
- Clube de alunos e professores no WhatsApp
- Mentorias online em grupo toda semana
- Estude pelo Aplicativo (Android e iOS)
- Suporte 24h / 7 dias por semana
- Biblioteca com +40 Tecnologias
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 64,90 /mês
Total: R$ 778,80
Garanta o desconto
- Formação FullStack Completa
- Aprenda Marketing digital, automações e IA para Devs
- Módulo como ganhar dinheiro com Tech
- +10.000 exercícios gamificados
- +50 projetos reais com acompanhamento
- Clube de alunos e professores no WhatsApp
- Mentorias online em grupo toda semana
- Estude pelo Aplicativo (Android e iOS)
- Suporte 24h / 7 dias por semana
- Biblioteca com +40 Tecnologias
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.

Wanderson Oliveira

Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!

Eduardo Dorneles

Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!

Adauto Junior

Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.