#ifndef __TRANSITIONSCENE_H__
#define __TRANSITIONSCENE_H__ #include "GameFrameHead.h" class CGameScene; class GAMEFRAME_API CSplashScene : public CCScene
{
public:
enum TargetScenes
{
TargetSceneINVALID = ,
TargetSceneFirstScene = ,
TargetSceneOtherScene = ,
TargetSceneMAX = ,
};
public:
CSplashScene();
virtual ~CSplashScene(); static CSplashScene* create(CGameScene* pScene);
bool init();
bool init(CGameScene* pScene); void retainPrevResource();
protected:
virtual void onEnter();
virtual void onEnterTransitionDidFinish();
void loadingCallBack(CCObject *obj); void onDelayLoading();
void replaceScene(); virtual void loadingPercent();
float getPercent();
private:
//virtual void update(float dt); private:
static CSplashScene* g_pSplashScene; CGameScene* m_pCurScene;
int m_nCurTag;
CGameScene* m_pNextScene; int m_nNumberOfSprites;
int m_nNumberOfLoadedSprites; float m_fPercent; CCLabelTTF* m_pLabelLoading; bool m_bRetainResource; }; #endif //__TRANSITIONSCENE_H__
#include "SplashScene.h"
#include "Config.h"
#include "XSprite.h"
#include "GameScene.h" CSplashScene* CSplashScene::g_pSplashScene = NULL; CSplashScene::CSplashScene()
{
m_pCurScene = NULL;
m_pNextScene = NULL;
m_nNumberOfSprites = ;
m_nNumberOfLoadedSprites = ;
m_fPercent = ;
m_bRetainResource = false;
} CSplashScene::~CSplashScene()
{
CCLog("CSplashScene::~CSplashScene");
} CSplashScene* CSplashScene::create(CGameScene* pScene )
{ CSplashScene* pSplashScene = new CSplashScene();
if (pSplashScene && pSplashScene->init(pScene))
{
pSplashScene->autorelease();
return pSplashScene;
} CCLog("error: CTransitScene::create");
SAFE_DELETE(pSplashScene);
return NULL; } bool CSplashScene::init( CGameScene* pScene )
{
m_pCurScene =(CGameScene*) CCDirector::sharedDirector()->getRunningScene();
if (m_pCurScene)
{
m_nCurTag = m_pCurScene->getSceneTag();
} m_pNextScene = pScene; return true;
} void CSplashScene::onEnter()
{
CCScene::onEnter(); } void CSplashScene::loadingCallBack( CCObject *obj )
{
++m_nNumberOfLoadedSprites;//每调用一次就+1
m_fPercent = (float) m_nNumberOfLoadedSprites / (float)m_nNumberOfSprites;
this->loadingPercent(); //全部加载完成后,就执行
if (m_nNumberOfLoadedSprites == m_nNumberOfSprites)
{
//加载完 延迟一下切换场景
CCDelayTime* pActDelay = CCDelayTime::create(0.5f);
CCFiniteTimeAction* pAction = CCSequence::create(pActDelay,
CCCallFunc::create(this, callfunc_selector(CSplashScene::replaceScene)),
NULL);
this->runAction(pAction);
} } void CSplashScene::onEnterTransitionDidFinish()
{
CCScene::onEnterTransitionDidFinish(); if (!m_bRetainResource)
{
//CCTextureCache::sharedTextureCache()->removeAllTextures();
//释放当前一个场景
if (CConfig::getInstance()->getElementInfoByItem(m_nCurTag))
{
vector<PlistInfo>& vecCurPlist = *(CConfig::getInstance()->getElementInfoByItem(m_nCurTag));
for (vector<PlistInfo>::iterator it = vecCurPlist.begin(); it != vecCurPlist.end(); it++)
{
CCSpriteFrameCache::sharedSpriteFrameCache()->removeSpriteFramesFromFile(it->strPlist.c_str());
}
}
} CCDelayTime *delayAction = CCDelayTime::create(0.2f);
CCCallFunc *callSelectorAction = CCCallFunc::create(this,callfunc_selector(CSplashScene::onDelayLoading));
this->runAction(CCSequence::create(delayAction, callSelectorAction,NULL)); } void CSplashScene::onDelayLoading()
{
//加载下一个场景
//初始化元素 把plist形式的图片资源加载到内存
vector<PlistInfo>& vecNextPlist = *(CConfig::getInstance()->getElementInfoByItem(m_pNextScene->getSceneTag()));
m_nNumberOfSprites = vecNextPlist.size();
for (vector<PlistInfo>::iterator it = vecNextPlist.begin(); it != vecNextPlist.end(); it++)
{
//加载图片到内存
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile(it->strPlist.c_str(),it->strImage.c_str());
} CCDelayTime *delayAction = CCDelayTime::create(0.2f);
CCCallFunc *callSelectorAction = CCCallFunc::create(this,callfunc_selector(CSplashScene::replaceScene));
this->runAction(CCSequence::create(delayAction, callSelectorAction,NULL));
} void CSplashScene::replaceScene()
{
CCDirector::sharedDirector()->replaceScene(CCTransitionFade::create(1.2f, (CCScene*)m_pNextScene));
} void CSplashScene::loadingPercent()
{ } float CSplashScene::getPercent()
{
return m_fPercent;
} void CSplashScene::retainPrevResource()
{
m_bRetainResource = true;
}

CSplashScene类的更多相关文章

  1. Java类的继承与多态特性-入门笔记

    相信对于继承和多态的概念性我就不在怎么解释啦!不管你是.Net还是Java面向对象编程都是比不缺少一堂课~~Net如此Java亦也有同样的思想成分包含其中. 继承,多态,封装是Java面向对象的3大特 ...

  2. C++ 可配置的类工厂

    项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性.传统的工厂实现如下: class Widget { public: virtual i ...

  3. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  4. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  5. ASP.NET Core 折腾笔记二:自己写个完整的Cache缓存类来支持.NET Core

    背景: 1:.NET Core 已经没System.Web,也木有了HttpRuntime.Cache,因此,该空间下Cache也木有了. 2:.NET Core 有新的Memory Cache提供, ...

  6. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类

    .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类 0x00 为什么要引入扩展方法 有的中间件功能比较简单,有的则比较复杂,并且依赖其它组件.除 ...

  7. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  8. PHP-解析验证码类--学习笔记

    1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1  定义变量 //随机因子 private $char ...

  9. C# 多种方式发送邮件(附帮助类)

    因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...

随机推荐

  1. Android屏幕尺寸适配注意事项

    1 基本设置 1.1 AndroidManifest.xml设置 在中添加子元素 android:anyDensity="true"时,应用程序安装在不同密度的终端上时,程序会分别 ...

  2. MySQL create table as与create table like对比

    a.create table like方式会完整地克隆表结构,但不会插入数据,需要单独使用insert into或load data方式加载数据b.create table as  方式会部分克隆表结 ...

  3. Meanshift,聚类算法(转)

    原帖地址:http://www.cnblogs.com/liqizhou/archive/2012/05/12/2497220.html   记得刚读研究生的时候,学习的第一个算法就是meanshif ...

  4. [Python爬虫] 之三十一:Selenium +phantomjs 利用 pyquery抓取消费主张信息

    一.介绍 本例子用Selenium +phantomjs爬取央视栏目(http://search.cctv.com/search.php?qtext=消费主张&type=video)的信息(标 ...

  5. 30款超酷的HTTP 404页面未找到错误设计

    访问网站过程中,我们最常看到的HTTP错误就是404页面未找到错误,很多网站都针对这个错误设计自己富有个性的页面,在今天这篇文章中我们就分 享30多款设计非常霸道的404错误页面,希望大家能够找到更多 ...

  6. mysql安装错误总结

    1.若在启动mysql服务时出现如下错误,可查看错误日志找出错误原因. Error:Starting MySQL.The server quit without updating PID file ( ...

  7. python 利用 setup.py 手动安装第三方类库

    python 利用 setup.py 手动安装第三方类库 由于我在mac使用时,装了python3,默认有python2的环境,使用 pip 安装第三方类库时,老是安装到 python2的环境上: 在 ...

  8. codechef The Ball And Cups题解

    The Ball And Cups At the end of a busy day, The Chef and his assistants play a game together. The ga ...

  9. TP框架ajax U方法不解析怎么办?

    TP框架中ajax U方法不解析 ajax U方法不解析 ajax url不解析 问题: 造成问题原因: Js 存在单独的 js文件中和html分离了.造成不解析! 解决方法: 方法一:将js放到ht ...

  10. Android日常开发总结

    全部Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修改到处有效. 数据库表段字段常量和SQL逻辑分离,更清晰,建议使用 ...