Tutorial: Desenvolvendo um jogo ao estilo Mole Hunting – Parte 2: Toupeiras com vida

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. []

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