Mudança de cena
De acordo com o artigo anterior, estabelecemos nosso próprio MyHelloWorldScene. Então, como mudar do HelloWorldScene para MyHelloWorldScene?
Na verdade, é muito simples. Queremos trocar de cena, então deve haver um ponto de disparo, usamos o botão Fechar no canto inferior direito do HelloWorld para alcançá-lo.
O que precisamos fazer é pressionar o botão Fechar em vez de fechar a janela, mas mudar para MyHelloWorldScene. Então, vamos dar uma olhada na função menuCloseCallback () do HelloWorldScene.cpp. Basta remover o processo de fechamento e adicionar uma frase. (Observação: não se esqueça de adicionar o arquivo de cabeçalho MyHelloWorldScene.h)
void HelloWorld::menuCloseCallback(Ref* sender)
{
//Director::getInstance()->end();
Director::getInstance()->replaceScene(MyHelloWorld::createScene());
}
Como você pode ver, alterei o texto e as imagens do Label no MyHelloWorld para que fiquem mais claros.
Efeitos especiais
Essa transformação direta é um pouco terrena, como adicionar alguns efeitos de transformação. O Cocos2dx preparou a função para nós, basta tornar o código a seguir para estar OK.
void HelloWorld::menuCloseCallback(Ref* sender)
{
//Director::getInstance()->end();
Director::getInstance()->replaceScene(TransitionSlideInT::create(2.0f, MyHelloWorld::createScene()));
}
Olhando para o efeito, você sente o sucesso de público inicial?
TransitionSlideInT também é uma classe de cena, que cria esse tipo de cena com um efeito deslizante através da função Criar.
Tem dois parâmetros,
float f: tempo para troca de cena, em segundos
Cena * cena: a cena alvo que você deseja alternar
O Cocos2dx não apenas fornece esse efeito especial, mas também muitos outros,
Por exemplo: TransitionJumpZoom: a cena original diminui o zoom e a nova cena aumenta o zoom.
Depois, há TransitionFadeUp: o efeito cego de baixo para cima:
Não há muitos outros exemplos, você pode verificar a API oficial . Essas transições começam com a troca de cenas.
Avanço e pop-up de cena
Use replaceScene para alternar cenas.Depois que a nova cena for exibida, os recursos da cena antiga serão liberados. Isso é muito necessário, pois uma cena às vezes pode ser muito grande; portanto, os recursos da cena antiga devem ser liberados após a troca de cena.
Às vezes, não queremos que a cena antiga seja lançada, mas queremos alternar entre a antiga e a nova. Isso usa a cena para avançar e aparecer.
Altere replaceScene para pushScene:
// HelloWorldScene.cpp
void HelloWorld::menuCloseCallback(Ref* sender)
{
//Director::getInstance()->end();
Director::getInstance()->pushScene(TransitionSplitCols::create(2.0f, MyHelloWorld::createScene()));
}
Em MyHelloWorldScene, faça as seguintes alterações:
// MyHelloWorldScene.h
void backToScene(Ref* sender);
// MyHelloWorldScene.cpp
auto closeItem = MenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
CC_CALLBACK_1(MyHelloWorld::backToScene, this));
void MyHelloWorld::backToScene(Ref* sender)
{
Director::getInstance()->popScene();
}
As funções popScene e pushScene são correspondentes. Use a função popScene () para retornar à cena original, e os recursos de cena do MyHelloWorld serão liberados.