加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

【麦可网】Cocos2d-X跨平台游戏开发学习笔记---第二十课:Cocos2

发布时间:2020-12-14 21:38:15 所属栏目:百科 来源:网络整理
导读:【麦可网】 Cocos2d-X 跨平台游戏开发 --- 学习笔记 第二十课: Cocos2D-X 场景切换 1-3 ============================================================================================================================================================

【麦可网】Cocos2d-X跨平台游戏开发---学习笔记

第二十课:Cocos2D-X场景切换1-3

=======================================================================================================================================================================

课程目标:

-Cocos2D-X场景切换

课程重点:

-Cocos2D-X场景堆栈

-Cocos2D-X切换方式

考核目标:

-理解Cocos2D-X场景堆栈

-使用Cocos2D-X场景切换特效

=======================================================================================================================================================================

一、用图层切换画面

void MenuLayerMainMenu::menuCallback2(CCObject* sender)
{
    ((CCLayerMultiplex*)m_pParent)->switchTo(2);
}
其中:
void CCLayerMultiplex::switchTo(unsigned int n)
{
    CCAssert( n < m_pLayers->count(),"Invalid index in MultiplexLayer switchTo message" );

//删除图层
    this->removeChild((CCNode*)m_pLayers->objectAtIndex(m_nEnabledLayer),true);

    m_nEnabledLayer = n;

//添加图层
    this->addChild((CCNode*)m_pLayers->objectAtIndex(n));
}


二、用场景切换画面

场景一:
bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !CCLayer::init() )
    {
        return false;
    }

	CCMenuItemLabel* cocos2dItem = CCMenuItemLabel::create( CCLabelTTF::create("Scence1","Arial",20),this,menu_selector(HelloWorld::menuCloseCallback) );
    cocos2dItem->setPosition(ccp(200,200));
	CCMenu* menu = CCMenu::createWithItem(cocos2dItem);
	menu->setPosition(CCPointZero);
	this->addChild(menu);

    return true;
}


void HelloWorld::menuCloseCallback(CCObject* pSender)
{
	CCScene* scence2 = SCENE2::scene();
	CCDirector::sharedDirector()->replaceScene(scence2);
}

------------------------------------------------------------------------
场景二:
bool SCENE2::init()
{
	//////////////////////////////
	// 1. super init first
	if ( !CCLayer::init() )
	{
		return false;
	}

	CCMenuItemLabel* cocos2dItem = CCMenuItemLabel::create( CCLabelTTF::create("Scence2",menu_selector(SCENE2::menuCloseCallback) );
	cocos2dItem->setPosition(ccp(200,200));
	CCMenu* menu = CCMenu::createWithItem(cocos2dItem);
	menu->setPosition(CCPointZero);
	this->addChild(menu);
	
	return true;
}


void SCENE2::menuCloseCallback(CCObject* pSender)
{
	CCScene* scence1 = HelloWorld::scene();
	CCDirector::sharedDirector()->replaceScene(scence1);
}

ps:如果在包含头文件的时候出现:无法打开源文件。则表示头文件的位置放置不正确,应放在Class目录下。

切换场景的几个接口:
void CCDirector::replaceScene(CCScene *pScene)
{
    CCAssert(m_pRunningScene,"Use runWithScene: instead to start the director");
    CCAssert(pScene != NULL,"the scene should not be null");

    unsigned int index = m_pobScenesStack->count();

    m_bSendCleanupToScene = true;
    m_pobScenesStack->replaceObjectAtIndex(index - 1,pScene);

    m_pNextScene = pScene;
}

---------------------------------------------------------
void CCDirector::pushScene(CCScene *pScene)
{
    CCAssert(pScene,"the scene should not null");

    m_bSendCleanupToScene = false;

    m_pobScenesStack->addObject(pScene);
    m_pNextScene = pScene;
}

---------------------------------------------------------
void CCDirector::popScene(void)
{
    CCAssert(m_pRunningScene != NULL,"running scene should not null");

    m_pobScenesStack->removeLastObject();
    unsigned int c = m_pobScenesStack->count();

    if (c == 0)
    {
        end();
    }
    else
    {
        m_bSendCleanupToScene = true;
        m_pNextScene = (CCScene*)m_pobScenesStack->objectAtIndex(c - 1);
    }
}

---------------------------------------------------------
void CCDirector::popToRootScene(void)
{
    popToSceneStackLevel(1);
}

给切换的场景添加动画:
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
	CCScene* scence2 = SCENE2::scene();
	CCScene* tra_scence2 = CCTransitionSlideInB::create(2.0,scence2);
	CCDirector::sharedDirector()->replaceScene(tra_scence2);
}

---------------------------------------------------------------
void SCENE2::menuCloseCallback(CCObject* pSender)
{
	CCScene* scence1 = HelloWorld::scene();
	CCScene* tra_scence1 = CCTransitionMoveInL::create(2.0f,scence1);
	CCDirector::sharedDirector()->replaceScene(tra_scence1);
}

===================================================================

总结:

好的切换场景动画,能够提高用户体验。

开心一刻:

何四与邻居发生争执,何四便粗鲁地骂对方:“你是猪!”此事被居民小区治安员知道了,于是要罚何四30元款。

何四接过罚单,很不服气:“上个月我也是骂他是猪,你只罚了我20元嘛。”

“很抱歉,”治安员苦笑一声,“近段猪肉涨价了。”

【麦可网】Cocos2d-X跨平台游戏开发---教程下载:http://pan.baidu.com/s/1kTio1Av

【麦可网】Cocos2d-X跨平台游戏开发---笔记系列:http://blog.csdn.net/qiulanzhu

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读