Criamos a primeira tela do nosso próximo game para termos uma ideia de como ele ficará.
Porém, as toupeiras ainda estão estáticas, sem qualquer movimento.
Vamos fazê-las saírem e entrarem nos buracos de forma aleatória.
Criamos no último tutorial um projeto no Cocos2d-x que resultará no nosso próximo game. Vimos como funciona um jogo ao estilo mole hunting e testamos o nosso sprite sheet para termos uma ideia de como ficará o gameplay. Daremos continuidade no desenvolvimento do jogo, adicionando a primeira funcionalidade dele: as toupeiras aparecerem e desaparecem dos buracos de forma aleatória. Partiu.
Esse tutorial será relativamente simples. Primeiramente, adicionaremos na classe “HelloWorld” o protótipo do único método necessário. Abra o arquivo “HelloWorldScene.h” e adicione a seguinte linha de código:
void sobeToupeira();
logo abaixo dessa:
cocos2d::CCSprite* toupeiras[6];
Deixarei a explicação do método “sobeToupeira” para depois. Salve o arquivo “HelloWorldScene.h”. Abra o arquivo “HelloWorldScene.cpp” e modifique a seguinte linha de código:
HelloWorld::toupeiras[i] = CCSprite::createWithSpriteFrameName(“Toupeira4.png”);
de forma que ela fique assim:
HelloWorld::toupeiras[i] = CCSprite::createWithSpriteFrameName(“Toupeira1.png”);
Na verdade, apenas modificamos o frame inicial dos sprites adicionados no tutorial passado. Agora, os sprites precisam ficar com a imagem do buraco por padrão e realizar, periodicamente, animações da toupeira aparecendo e se escondendo.
No mesmo arquivo, adicione a seguinte linha de código:
schedule(schedule_selector(HelloWorld::sobeToupeira),5.0);
logo abaixo dessas:
for(int i=0;i<6;i++) {
HelloWorld::toupeiras[i] = CCSprite::createWithSpriteFrameName(“Toupeira1.png”);
HelloWorld::toupeiras[i]->setScale((0.2*size.height)
/HelloWorld::toupeiras[i]->boundingBox().size.height);
HelloWorld::toupeiras[i]->setPosition(ccp(
((i%3+1)/4.0)*size.width,((i/3+1)/3.0)*size.height));
addChild(HelloWorld::toupeiras[i]);
}
Nessa linha adicionada, nós fizemos com que a primeira toupeira saia do buraco somente após cinco segundos após o início do aplicativo. Por último, basta implementarmos o método “sobeToupeiras”. Adicione as seguintes linhas de código no final do arquivo:
void HelloWorld::sobeToupeira() {
static unsigned int r = time(NULL);
int i;
do {
srand(r);
r = rand();
i = r%6;
}while(HelloWorld::toupeiras[i]->numberOfRunningActions());
CCArray *seq = CCArray::create();
seq->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(“Toupeira2.png”));
seq->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(“Toupeira3.png”));
seq->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(“Toupeira4.png”));
seq->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(“Toupeira5.png”));
seq->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(“Toupeira4.png”));
seq->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(“Toupeira3.png”));
seq->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(“Toupeira2.png”));
seq->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(“Toupeira1.png”));
HelloWorld::toupeiras[i]->runAction(CCAnimate::create(CCAnimation::createWithSpriteFrames(seq,0.1)));
srand(r);
r = rand();
schedule(schedule_selector(HelloWorld::sobeToupeira),((float)r)/RAND_MAX);
}
Esse método possui a função de animar uma toupeira aparecendo e desaparecendo em um dos buracos, esses representados cada um por um sprite. Inicialmente, nós sorteamos um número inteiro aleatório entre 0 e 5, para decidir em qual buraco sairá a próxima toupeira.
Caso seja sorteado um número referente a um sprite que já está animando, o método sorteia outro número para a toupeira sair em outro buraco. Isso evita que uma toupeira saia por um buraco onde já tem uma no momento.
Logo após, nós iniciamos a animação da toupeira saindo e sorteamos um tempo aleatório entre 0 e 1 para a próxima toupeira sair. A compilação dessa versão do código resulta em algo como é mostrado na animação a seguir.
Vimos nesse tutorial como adicionar a funcionalidade de aparecimento e desaparecimento aleatório das toupeiras. Para isso, precisamos declarar um método que faz com que uma toupeira apareça e desapareça de um buraco qualquer.
Toda vez que essa função é chamada, é sorteado um valor aleatório para decidir onde ela sairá e um valor aleatório de tempo para a próxima toupeira sair.
Teremos uma primeira versão jogável no próximo tutorial. Adicionaremos a funcionalidade de toque na tela para bater com a marreta na cabeça das toupeiras malditas.
Um grande abraço e até mais. []