Tutorial: Desenvolvendo um Jogo ao Estilo Pokey Pummel em Cocos2d-x: Parte 3 – Quebrando a Pedra Base

Ok, conseguimos fazer a pedra da base trincar com as picaretadas do jogador.

Está faltando quebrá-la e fazer com que as pedras acima caiam.

Vamos iniciar o terceiro tutorial sobre o desenvolvimento de um jogo ao estilo Pokey Pummel.

Parte 1Parte 2 – Parte 3 – Parte 4

No último tutorial nós implementamos a resposta de toques na tela. Fizemos com que a pedra da base aumentasse gradativamente a sua rachadura a cada toque do jogador. Além disso, fizemos com que a picareta fosse mostrada enquanto o jogador estivesse com o dedo encostado na tela.

No tutorial de hoje nós continuaremos a implementar a danificação da pedra da base. Dessa vez, nós a faremos quebrar após quatro picaretadas do jogador. Esse evento desencadeia a queda das pedras empilhadas logo acima. Além disso, a pedra da base passa a ser a próxima, logo acima da pedra recém-quebrada, sendo essa que sofrerá aumento de rachaduras.

Vamos começar os trabalhos.

 

Identificação do Sprite da Pedra da Base

Como dito, a pedra da base quebra após quatro cliques do jogador. Sim, são quatro mesmo, eu errei a conta nos tutoriais anteriores. =P Ao quebrar a pedra da base, ela precisa ficar invisível ao jogador. Além disso, as outras pedras que se encontram empilhadas sobre ela precisam cair, todas ao mesmo tempo. A pedra posicionada logo acima da pedra recém-quebrada passará a ser a pedra da base e será ela que sofrerá as rachaduras quando o jogador voltar a dar picaretadas.

Vamos iniciar a codificação com o intuito de modificar os frames do sprite que representa a pedra da base. Inicialmente, a pedra da base é representada pelo sprite de índice 0 do vetor de 10 sprites. Quando a primeira pedra é quebrada, o sprite de índice 0 passa a ficar invisível e o novo sprite que representa a pedra da base passa a ser o de índice 1. O jogo realiza essas modificações de forma gradativa até que o sprite da base passa a ser o de índice 9. Dessa forma, é necessário armazenar em uma variável o número identificador do sprite que representa a pedra da base no momento. Abra o arquivo “HelloWorldScene.cpp” e adicione as seguintes linhas de código:

static int blocoBase = 0;

int i;

logo abaixo dessa:

static int cliques = 1;

A variável “i” é apenas uma variável contadora que será necessária posteriormente. No último tutorial, nós modificamos apenas os frames do sprite de índice 0 quando o jogador realiza uma picaretada. Com a adição da funcionalidade a ser implementada no tutorial de hoje, nós precisaremos modificar a linha de código que realiza as mudanças de frames do sprite que representa a pedra da base. Modifique a seguinte linha de código:

HelloWorld::blocos[0]->setSpriteFrame(nome);

de forma que ela fique assim:

HelloWorld::blocos[blocoBase]->setSpriteFrame(nome);

Com essa modificação, somente o sprite que representa a pedra da base naquele momento sofrerá aumento de rachadura.

 

Quebrando a Pedra da Base

Para finalizarmos o tutorial de hoje, basta (i) deixar a pedra da base invisível após 4 picaretadas; (ii) realizar uma animação de queda das pedras empilhadas sobre a pedra recém-quebrada e (iii) modificar as variáveis de identificação e rachadura da pedra da base. Parece muita coisa a ser feita, mas, na verdade, é necessário apenas a inclusão de algumas poucas linhas de código. Ainda no arquivo “HelloWorldScene.cpp”, adicione o seguinte trecho de código:

else {

    HelloWorld::blocos[blocoBase]->setVisible(false);

    cliques = 1;

    blocoBase++;

    for(i=blocoBase;i<10;i++) {

        MoveTo *anim = MoveTo::create(0.2,Vec2(HelloWorld::blocos[0]->getPositionX(),

          HelloWorld::blocos[0]->getPositionY()+(i-blocoBase)*HelloWorld::blocos[0]->getBoundingBox().size.height));

        HelloWorld::blocos[i]->runAction(anim);

    }

}

logo abaixo dessas linhas de código:

    HelloWorld::blocos[blocoBase]->setSpriteFrame(nome);

}

Agora sim. Basta compilar o código e executar o jogo. Você perceberá que, após quatro picaretadas na pedra da base, ela fica invisível e as pedras empilhadas acima caem. A pedra mais embaixo da pilha de pedras que caíram toma o lugar da pedra quebrada e ela passa a ser a nova pedra da base. Perceba que esse comportamento acontece até que a última pedra seja destruída.

 

Relembrando, no tutorial de hoje nós implementamos a quebra da pedra da base da pilha de pedras. Precisamos criar uma variável que armazena o número identificador do sprite dela no vetor de sprites, visto que a pedra da base varia no decorrer do jogo. Com a criação dessa variável, nós podemos modificar os frames do sprite que representa a pedra da base no momento. Por último, nós a deixamos invisível após 4 picaretadas e implementamos uma animação dos sprites que estão acima da pedra quebrada. Fizemos com que eles caíssem em um intervalo de tempo de 0,2 segundos.

O jogo ainda não será finalizado no tutorial de hoje. A funcionalidade de término de jogo será implementada no próximo tutorial. Vocês não perdem por esperar. ;D

Um grande abraço e até mais. []

Santiago Viertel

Santiago Viertel

Formado em Bacharelado em Ciência da Computação (UDESC), mestre e doutorando em Análise de Algoritmos (UFPR). Foi programador da Céu Games por 8 anos. Possui a preferência por jogos de estratégia e de tiro em primeira pessoa. Jogando bastante DotA 2, Left 4 Dead 2 e Age of Empires II HD.

Send this to a friend