微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Cocos2d-x_场景切换常用特效和CCNode的生命周期函数

//
// HelloWorldScene.h
//

#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"
#include "cocos-ext.h"
#include "TestLayer.h"
USING_NS_CC;
USING_NS_CC_EXT;

class HelloWorld : public cocos2d::cclayer
{
public:
    virtual bool init();
    static cocos2d::CCScene* scene();

    CREATE_FUNC(HelloWorld);
    
    void changeScene();
    
    // CCNode生命周期函数
    virtual void onEnter();
    virtual void onEnterTransitionDidFinish();
    virtual void onExit();
    
    // 解释上面3个生命周期函数
    /*
     virtual void onEnter();  当init()函数执行完成后,认进入onEnter()生命周期函数
     virtual void onEnterTransitionDidFinish();  当A场景切换到B场景时,过度动画执行完成后调用B场景的onEnterTransitionDidFinish()生命周期函数
     virtual void onExit();  当场景退出后,调用此生命周期函数
     */
    
    // A场景和B场景切换时的生命周期函数调用顺序如下:
    /*
     1、B场景的init函数
     2、B场景的OnEnter函数
     3、A场景的OnExit函数
     4、B场景的onEnterTransitionDidFinish函数
     5、A场景的析构函数
     */
};

#endif

//
// HelloWorldScene.cpp
//

#include "HelloWorldScene.h"

USING_NS_CC;

CCScene* HelloWorld::scene()
{
    CCScene *scene = CCScene::create();
    HelloWorld *layer = HelloWorld::create();
    scene->addChild(layer);
    
    return scene;
}

bool HelloWorld::init()
{
    if ( !cclayer::init() )
    {
        return false;
    }
    
    CCSize winSize = CCDirector::sharedDirector()->getWinSize();

    CCSprite *pSpr = CCSprite::create("background1.png");
    pSpr->setPosition(ccp(240,160));
    addChild(pSpr);
    
    cclabelTTF *labelTTF =cclabelTTF::create("点击切换场景","Helvetica-Hald",30);
    labelTTF->setColor(ccRED);
    CcmenuItemLabel *labelItem = CcmenuItemLabel::create(labelTTF,this,menu_selector(HelloWorld::changeScene));
    Ccmenu *menu = Ccmenu::create(labelItem,NULL);
    addChild(menu);
    
    return true;
}

void HelloWorld::changeScene()
{
    CCTransitionScene *reScene = NULL;
    CCScene *s = TestLayer::scene();
    float t = 1.2f;
    
    // CCTransitionJumpZoom
    reScene = CCTransitionJumpZoom::create(t,s);
    
    // CCTransitionProgressRadialccw
    reScene = CCTransitionProgressRadialccw::create(t,s);
    
    // CCTransitionProgressRadialCW
    /*reScene = CCTransitionProgressRadialCW::create(t,s);
    
    // CCTransitionProgressHorizontal
    reScene = CCTransitionProgressHorizontal::create(t,s);
    
    // CCTransitionProgressvertical
    reScene = CCTransitionProgressvertical::create(t,s);
    
    // CCTransitionProgressInOut
    reScene = CCTransitionProgressInOut::create(t,s);
    
    // CCTransitionProgressOutIn
    reScene = CCTransitionProgressOutIn::create(t,s);
    
    // CCTransitionCrossFade
    reScene = CCTransitionCrossFade::create(t,s);
    
    // CCTransitionPageTurn
    reScene = CCTransitionPageTurn::create(t,s,false);
    
    // CCTransitionFadeTR
    reScene = CCTransitionFadeTR::create(t,s);
    
    // CCTransitionFadeBL
    reScene = CCTransitionFadeBL::create(t,s);
    
    // CCTransitionFadeUp
    reScene = CCTransitionFadeUp::create(t,s);
    
    // CCTransitionFadeDown
    reScene = CCTransitionFadeDown::create(t,s);
    
    // CCTransitionTurnOffTiles
    reScene = CCTransitionTurnOffTiles::create(t,s);
    
    // CCTransitionSplitRows
    reScene = CCTransitionSplitRows::create(t,s);
    
    // CCTransitionSplitCols
    reScene = CCTransitionSplitCols::create(t,s);
    
    // CCTransitionFade
    reScene = CCTransitionFade::create(t,ccRED);
    
    // CCTransitionFlipX
    reScene = CCTransitionFlipX::create(t,kCCTransitionorientationLeftOver);
    
    // CCTransitionFlipY
    reScene = CCTransitionFlipY::create(t,kCCTransitionorientationLeftOver);
    
    // CCTransitionFlipAngular
    reScene = CCTransitionFlipAngular::create(t,kCCTransitionorientationLeftOver);
    
    // CCTransitionZoomFlipX
    reScene = CCTransitionZoomFlipX::create(t,kCCTransitionorientationLeftOver);
    
    // CCTransitionZoomFlipY
    reScene = CCTransitionZoomFlipY::create(t,kCCTransitionorientationLeftOver);
    
    // CCTransitionZoomFlipAngular
    reScene = CCTransitionZoomFlipAngular::create(t,kCCTransitionorientationLeftOver);
    
    // CCTransitionShrinkGrow
    reScene = CCTransitionShrinkGrow::create(t,s);
    
    // CCTransitionRotoZoom
    reScene = CCTransitionRotoZoom::create(t,s);
    
    // CCTransitionMoveInL
    reScene = CCTransitionMoveInL::create(t,s);
    
    // CCTransitionMoveInR
    reScene = CCTransitionMoveInR::create(t,s);
    
    // CCTransitionMoveInT
    reScene = CCTransitionMoveInT::create(t,s);
    
    // CCTransitionMoveInB
    reScene = CCTransitionMoveInB::create(t,s);
    
    // CCTransitionSlideInL
    reScene = CCTransitionSlideInL::create(t,s);
    
    // CCTransitionSlideInR
    reScene = CCTransitionSlideInR::create(t,s);
    
    // CCTransitionSlideInT
    reScene = CCTransitionSlideInT::create(t,s);
    
    // CCTransitionSlideInB
    reScene = CCTransitionSlideInB::create(t,s);*/
    
    CCDirector::sharedDirector()->replaceScene(reScene);
}

void HelloWorld::onEnter()
{
    cclayer::onEnter();  // 务必调用
    cclOG("HelloWorld::onEnter");
}

void HelloWorld::onEnterTransitionDidFinish()
{
    cclayer::onEnterTransitionDidFinish();  // 务必调用
    cclOG("HelloWorld::onEnterTransitionDidFinish");
}

void HelloWorld::onExit()
{
    cclayer::onExit();
    cclOG("HelloWorld::onExit");
}



//
// TestLayer.h
//  

#ifndef HelloWorld_TestLayer_h
#define HelloWorld_TestLayer_h

#include "cocos2d.h"
#include "cocos-ext.h"
USING_NS_CC;
USING_NS_CC_EXT;

class TestLayer : public cocos2d::cclayer
{
public:
    virtual bool init();
    static cocos2d::CCScene *scene();
    
    CREATE_FUNC(TestLayer);

    // CCNode生命周期函数
    virtual void onEnter();
    virtual void onEnterTransitionDidFinish();
    virtual void onExit();
};

#endif

//
// TestLayer.cpp
//

#include "TestLayer.h"

USING_NS_CC;

CCScene *TestLayer::scene()
{
    CCScene *scene = CCScene::create();
    TestLayer *layer = TestLayer::create();
    scene->addChild(layer);
    
    return scene;
}

bool TestLayer::init()
{
    if (!cclayer::init())
    {
        return false;
    }

    CCSize winSize = CCDirector::sharedDirector()->getWinSize();
    
    CCSprite *pSpr = CCSprite::create("background2.png");
    pSpr->setPosition(ccp(winSize.width*0.5,winSize.height*0.5));
    this->addChild(pSpr);
    
    return true;
}

void TestLayer::onEnter()
{
    cclayer::onEnter();
    cclOG("TestLayer::onEnter");
}

void TestLayer::onEnterTransitionDidFinish()
{
    cclayer::onEnterTransitionDidFinish();
    cclOG("TestLayer::onEnterTransitionDidFinish");
}

void TestLayer::onExit()
{
    cclayer::onExit();
    cclOG("TestLayer::onExit");
}

原文地址:https://www.jb51.cc/cocos2dx/346766.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐