#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 Studio] Android Studio使用教程(一)

    转载:http://blog.csdn.net/hyr83960944/article/details/37509113 今年的Google全球开发者 大会虽然没有新的Android系统和设备,但是还 ...

  2. 推荐一份 Google 面试指南

    经常有不少读者在我公众号后台留言,说自己还是应届毕业生,缺乏工作经验与项目经验,不知道如何才能通过面试? 其实,项目经验固然重要,但是企业也知道,对于应届毕业生,是很难有拿得出手的项目经验出来的,毕竟 ...

  3. iOS:shareSDK第三方登录

    shareSDK第三方登录跟分享差不多,比较简单,前面已有介绍.这里简单写一下第三方登录吧. 1.首先:我用到了QQ.微信.新浪这三个平台的登录,需要到它们各自的开发者平台注册开发者账号,这是我的QQ ...

  4. 漏洞预警 | ECShop全系列版本远程代码执行高危漏洞

    2018年9月1日,阿里云态势感知发布预警,近日利用ECShop全系列版本的远程代码执行漏洞进行批量化攻击量呈上升趋势.该漏洞利用简单且危害较大,黑客可通过WEB攻击直接获得服务器权限. 漏洞原理 该 ...

  5. 再谈JavaScript的数据类型问题

    JavaScript的数据类型问题已经讨论过很多次了,但许多人还有许多书仍然沿用着错误的.混乱的一些观点,所以就再细讲一回. 提及这个讨论的原因在于argb同学在我的MSN博客上的一段回复,又更早的起 ...

  6. 用mysqlslap对MySQL进行压力测试

    MySQL5.1地的确提供了好多有力的工具来帮助我们DBA进行数据库管理.现在看一下这个压力测试工具mysqlslap.关于他的选项手册上以及--help介绍的很详细.我解释一下一些常用的选项.这里要 ...

  7. 【Python】Django filter 如何支持 or 条件过滤?

    from django.db.models import Q Item.objects.filter(Q(creator=owner) | Q(moderated=False)) 代码示例: if(r ...

  8. 【转】svn 的开发目录结构和流程

    原文: https://blog.csdn.net/iteye_15570/article/details/82548132 ------------------------------------- ...

  9. 异类的Javascript处理和解析URL的方式

    通常来说,我们使用Javascript处理和解析URL是使用location对象.在今天这个代码小技巧中,我们使用另外一个比较异类的方式处理和解析URL. 代码如下: function parseUR ...

  10. HDU 1595 find the longest of the shortest【次短路】

    转载请注明出处:http://blog.csdn.net/a1dark 分析:经典的次短路问题.dijkstra或者SPFA都能做.先找出最短路.然后依次删掉没条边.为何正确就不证明了.了解思想直接A ...