Tutorial: Criando um jogo ao estilo Robot Unicorn Attack – Parte 5: HUDs e término

Estamos finalmente terminando o desenvolvimento de mais um game.

Dessa vez, nós finalizaremos um jogo ao estilo Robot Unicorn Attack.

Só está faltando adicionar os elementos de HUD e a implementação do término do jogo.

Vimos no último tutorial como fazer com que as plataformas fossem criadas em alturas aleatórias. Era sorteado um valor aleatório de altura toda vez que uma plataforma chegasse ao fim da tela e ela era reposicionada conforme a altura sorteada. Também fizemos com que o Sonic (créditos a SEGA) animasse quando ele corresse e quando ele saltasse. Nesse tutorial, nós finalizaremos a implementação do game adicionando dois elementos de HUD: um contador de tempo, ou de distância percorrida, e uma mensagem de fim de jogo, que é mostrada somente quando o Sonic cai no buraco.

Iniciaremos o tutorial adicionando uma variável de etiqueta na classe “HelloWorld”. Isso é necessário porque precisaremos de uma referência à etiqueta quando atualizarmos o tempo de jogo a cada novo quadro processado. Então, abra o arquivo “HelloWorldScene.h” e adicione a seguinte linha de código:

cocos2d::CCLabelTTF* tempo;

logo abaixo dessa:

cocos2d::CCTMXTiledMap* plataforma2;

Salve esse arquivo e abra o arquivo “HelloWorldScene.cpp”, que agora faremos modificações nele. Primeiramente, criaremos uma etiqueta que mostra o tempo de jogo e a posicionaremos na parte superior central da tela. Adicione as seguintes linhas de código:

HelloWorld::tempo = CCLabelTTF::create(“0”,“”,40);

HelloWorld::tempo->setPosition(ccp(size.width/2,0.9*size.height));

addChild(HelloWorld::tempo);

logo ACIMA dessa:

setTouchEnabled(true);

Note que essa etiqueta mostrará, inicialmente, o valor “0” na tela. Esse valor precisa ser modificado a cada no quadro processado pelo jogo. Isso porque o tempo corre durante o processamento entre quadros. Dessa forma, precisaremos modificar o valor que essa etiqueta mostra na tela. Para isso, adicione as seguintes linhas de código:

static float tempo = -dt;

char text[10];

tempo += dt;

sprintf(text,“%.2f”,tempo);

HelloWorld::tempo->setString(text);

logo abaixo dessa:

void HelloWorld::atualiza(float dt) {

É possível perceber que foi criada uma variável estática nomeada “tempo”. Essa variável armazena o tempo corrido desde o começo do jogo. No primeiro quadro apresentado, ela recebe o valor 0 (dt – dt) e ela é incrementada com o tempo corrido entre quadros a cada novo quadro processado. Isso fará com que ela armazene exatamente o tempo corrido desde o começo do jogo. Basta mostrar o seu conteúdo na etiqueta criada anteriormente. Com a etiqueta sendo atualizada a cada quadro, o jogo mostra um cronômetro na tela por meio da etiqueta.

Estamos a um passo de terminar o desenvolvimento do jogo. =] Agora só precisamos parar o jogo quando o Sonic cai no buraco e mostrar outra etiqueta na tela indicando o fim do jogo. Para isso, adicione as seguintes linhas de código:

CCSize size = CCDirector::sharedDirector()->getWinSize();

if(HelloWorld::sonic->getPositionY()<-HelloWorld::sonic->boundingBox().size.height) {

    CCLabelTTF* fimDeJogo = CCLabelTTF::create(“FIM DE JOGO”,“”,80);

    fimDeJogo->setPosition(ccp(size.width/2,size.height/2));

    addChild(fimDeJogo);

    cleanup();

}

logo abaixo dessa:

(HelloWorld::gravidade*HelloWorld::tempoCorrido*HelloWorld::tempoCorrido)/2));

Se você perceber, esse código foi adicionado no final do método “atualiza”. Isso significa que é verificado a cada quadro processado se o Sonic está saindo pela parte de baixo da tela. Caso isso aconteça, é mostrada na tela uma etiqueta informando o término do jogo e o método atualiza não será mais chamado. Isso significa que o cronômetro não anda, que as plataformas não se movimentam e que o Sonic não corre mais. AGORA SIIIIM. O jogo está finalizado e pode ser compilado e executado. Para os curiosos de plantão, segue um vídeo do jogo sendo executado.

Vimos nesse tutorial como adicionar dois elementos de HUD: um que mostra o tempo e outro que mostra o término de jogo. Para isso precisamos criar uma variável que armazenava a referência de uma etiqueta para que ela pudesse ser atualizada com o tempo corrido a cada no quadro processado. Também verificamos se o Sonic saiu da tela pela parte de baixo. Quando isso acontece, o jogo para o processamento de quadros e mostra na tela uma etiqueta informando o término do jogo. No próximo tutorial nós iniciaremos o desenvolvimento de outro game, porém eu ainda não pensei em qual será. Deixo novamente vocês na expectativa.

Um grande abraço. []

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