loading

今天主要讲解一下场景切换过程中loading界面的制作。解释一下哈,在我们进行场景切换的时候,必然会有资源的加载,加载过程中,会停留在你操作的界面上。例如,你点击一按钮进入游戏场景,配置高的手机会华丽丽的进入下一场景,但是对于配置低的手机来说可就不一样喽。点击按钮之后,它会停留在按钮被点击状态,这个过程中资源加载,等资源加载完毕,才会进入下一个场景。

那,对于处在按钮被点击状态这段时间,我们是不是考虑做个loading或者什么的来屏蔽这种情况……

如果到此你还不明白,你可以看一下愤怒的小鸟,它场景切换过程中,会有loading……(对于低配手机来说)

下面说一下解决方案,我其余的奇思妙想和尝试就不和大家分享了:

大家先看看CCDirector的源码,其中有个m_pNotificationNode属性,这个是独立于scene之外的:

// Draw the Scene

void CCDirector::drawScene(void)

{

// calculate "global" dt

calculateDeltaTime();

//tick before glClear: issue #533

if (! m_bPaused)

{

m_pScheduler->update(m_fDeltaTime);

}

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

/* to avoid flickr, nextScene MUST be here: after tick and before draw.

XXX: Which bug is this one. It seems that it can't be reproduced with v0.9 */

if (m_pNextScene)

{

setNextScene();

}

kmGLPushMatrix();

// draw the scene

if (m_pRunningScene)

{

m_pRunningScene->visit();

}

// draw the notifications node

if (m_pNotificationNode)

{

m_pNotificationNode->visit();

}

if (m_bDisplayStats)

{

showStats();

}

kmGLPopMatrix();

m_uTotalFrames++;

// swap buffers

if (m_pobOpenGLView)

{

m_pobOpenGLView->swapBuffers();

}

if (m_bDisplayStats)

{

calculateMPF();

}

}

从源码可知,先访问了m_pRunningScene,然后又访问了m_pNotificationNode,这两个是没有什么影响的。。。

所以,我们在按钮点击的时候可以这么操作:

CCLayerColor *layer = CCLayerColor::create(ccc4(255,0,0,255), 720, 1280);//推荐使用屏蔽层

CCDirector::sharedDirector()->setNotificationNode(layer);

CCDirector::sharedDirector()->drawScene();

想要什么loading界面,你就加什么node,ok?好,这样子我们就成功加载了loading界面,但是记得要在下一个场景的init、onNodeLoaded、onEnter或者是onEnterTransitionDidFinish处理加载的这个node,处理如下:

CCDirector::sharedDirector()->setNotificationNode(NULL);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值