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 1 – Parte 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. []