工厂方法一般写法

StartLayer * StartLayer::create()

{

StartLayer *sl = new StartLayer();

sl->init();

sl->autorelease();

return sl;

}

也能够用CC的CCPlatformMacros.h文件中提供的宏 CREATE_FUNC 来替代上面一段代码

#define CREATE_FUNC(__TYPE__) \

static __TYPE__* create() \

{ \

    __TYPE__ *pRet = new __TYPE__(); \

    if (pRet && pRet->init()) \

    { \

        pRet->autorelease(); \

        return pRet; \

    } \

    else \

    { \

        delete pRet; \

        pRet = NULL; \

        return NULL; \

    } \

}

----------------------------------------------------从StartLayer  到
LoadingLayer---------------------------------------------------------

StartLayer.h

#pragma once

#include "cocos2d.h"

using namespace cocos2d;

class StartLayer : public CCLayer

{

public:

StartLayer();

virtual ~StartLayer();

bool init();

static StartLayer * create();

static CCScene * scene();

private:

void clickSigle(CCObject *sender);

};

StartLayer.cpp

#include "StartLayer.h"

#include "LoadingLayer.h"



StartLayer::StartLayer(void)

{

}



StartLayer::~StartLayer(void)

{

}





bool StartLayer::init()

{

if(!CCLayer::init())

{

return false;

}



//開始界面背景图片

CCSize screenSize = CCDirector::sharedDirector()->getWinSize();

CCSprite *bgSprite = CCSprite::create("BackGround.png");

bgSprite->setPosition(CCPoint(screenSize.width/2,screenSize.height/2));

this->addChild(bgSprite);



//button的使用

CCMenuItemImage *singleItem = CCMenuItemImage::create("btn1.png","btn2.png",this,menu_selector(StartLayer::clickSigle));

singleItem->setPosition(CCPointMake(80,-80));

CCMenu *menu = CCMenu::create(singleItem,NULL);

addChild(menu);



return true;

}



void StartLayer::clickSigle(CCObject *sender)

{

CCLOG("click sigle");



//跳转到loadingLayer界面

//用2s 动画来切换界面

CCScene *s = LoadingLayer::scene();

CCTransitionSplitRows *trans = CCTransitionSplitRows::create(2,s);

CCDirector::sharedDirector()->replaceScene(trans);

}



StartLayer * StartLayer::create()

{

StartLayer *sl = new StartLayer();

sl->init();

sl->autorelease();

return sl;

}



CCScene * StartLayer::scene()

{

StartLayer *sl = StartLayer::create();

CCScene *s = CCScene::create();

s->addChild(sl);

return s;

}

------------------------------------------------------------------------------------------

LoadingLayer.h

#pragma once

#include "cocos2d.h"

USING_NS_CC;





class LoadingLayer : public CCLayer

{

public:

int count;

LoadingLayer(void);

~LoadingLayer(void);

bool init();

static LoadingLayer * create();

static CCScene * scene();



//生命周期

    virtual void onEnter();

    virtual void onExit();

    virtual void onEnterTransitionDidFinish();





private:

void timeUpdate(float dt);





};

LoadingLayer.cpp

#include "LoadingLayer.h"

LoadingLayer::LoadingLayer(void)

{

}



LoadingLayer::~LoadingLayer(void)

{

}



bool LoadingLayer::init()

{

if(!CCLayer::init())

{

return false;

}



//载入载入界面背景图片

CCSprite *bgSprite = CCSprite::create("loading.png");

CCSize screenSize = CCDirector::sharedDirector()->getWinSize();

bgSprite->setPosition(ccp(screenSize.width/2,screenSize.height/2));

this->addChild(bgSprite);



//label的使用

CCLabelTTF* label = CCLabelTTF::create("loading","Arial",25);

label->setPosition(ccp(100,150));

label->setAnchorPoint(ccp(0,0.5));

label->setTag(100);

addChild(label);



count = 1;

return true;

}





void LoadingLayer::timeUpdate(float dt)

{

//拼接字符串

CCLabelTTF *label = (CCLabelTTF*)getChildByTag(100);

const char * str = label->getString();

char newstr[128];

if(++count > 5)

{

//停止定时器

unschedule(schedule_selector(LoadingLayer::timeUpdate));

}

sprintf(newstr,"%s.",str);

label->setString(newstr);





}



LoadingLayer* LoadingLayer::create()

{

LoadingLayer* layer = new LoadingLayer();

layer->init();

layer->autorelease();

return layer;

}





CCScene* LoadingLayer::scene()

{

LoadingLayer* layer = LoadingLayer::create();

CCScene * s = CCScene::create();

s->addChild(layer);

return s;

}





void LoadingLayer::onEnter()

{

CCLayer::onEnter();

}





void LoadingLayer::onExit()

{

CCLayer::onExit();

}





void LoadingLayer::onEnterTransitionDidFinish()

{

CCLayer::onEnterTransitionDidFinish();



//系统有一个轻量的定时器,每隔0.5s会调用this,timeUpdate方法

this->schedule(schedule_selector(LoadingLayer::timeUpdate),0.5f);

}

Cocos2D-X学习笔记 3 从一个场景切换到还有一个场景的更多相关文章

  1. EF学习笔记(十二):EF高级应用场景

    学习总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上篇链接:EF学习笔记(十一):实施继承 本篇原文链接:Advanced Entity Framework Scenari ...

  2. Android学习笔记(十二)——实战:制作一个聊天界面

    //此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 运用简单的布局知识,我们可以来尝试制作一个聊天界面. 一.制作 Nine-Patch 图片 : Nine-Pa ...

  3. [C#学习笔记1]用csc.exe和记事本写一个C#应用程序

    csc.exe是C#的命令行编译器(CSharpCompiler),可以编译C#源程序成可执行程序.它与Visual Studio等IDE(Integrated Development Environ ...

  4. 第十三周学习笔记(编辑器选错了重发了这一个 原博客的确周天晚上提交了orz)

    并发:逻辑控制流在时间上的重叠. 构造并发程序的方法: 进程 I/O多路复用 线程 基于进程的并发编程 假设我们有两个客户端和一个服务器,服务器正在监听一个监听表述符上的请求.现在假设服务器接受了客户 ...

  5. 剑指Offer的学习笔记(C#篇)-- 二叉树的下一个节点(好理解版本)

    题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 一 . 理解题意 该题目我们可以借鉴一个非常影响不好的 ...

  6. cocos2d 场景切换和弹出场景、收回场景

    场景弹出收回很简单 用以下代码在任意一个地方显示“设置场景”: [[CCDirector sharedDirector] pushScene:[Settings scene]]; 如果你身处“设置场景 ...

  7. 8 cocos2dx加入场景切换效果,控制场景切换彻底完毕之后再运行动画

     1 加入场景切换效果 供场景切换的类: CCTransitionJumpZoom CCTransitionProgressRadialCCW CCTransitionProgressRadial ...

  8. 【EF6学习笔记】(十二)EF高级应用场景

    本篇原文链接:Advanced Entity Framework Scenarios 本篇主要讲一些使用Code First建立ASP.NET WEB应用的时候除了基础的方式以外的一些扩展方式方法: ...

  9. Stage3D学习笔记(三):使用GPU绘制一个图片

    首先准备我们需要的图片,尺寸必须是2的幂数,我修改了一下Starling的图标拿来用: 还是先看看最终效果: 代码是居于上一节的代码进行修改的: package { import com.adobe. ...

随机推荐

  1. cocos2d-x游戏开发系列教程-超级玛丽05-CMMenuScene

    代码下载链接 http://download.csdn.net/detail/yincheng01/6864893 解压密码:c.itcast.cn 背景 上一篇博文提到appDelegate,在该类 ...

  2. ORA-00845 Oracle 启不来修改 MEMORY_TARGET

    1.内存减小导致Oracle启动不了   Last login: Sun Nov  4 15:09:06 2012 from 192.168.5.222  [oracle@h1 ~]$ sqlplus ...

  3. Wiki: HSL和HSV色彩空间

    HSL 和 HSV(也叫做 HSB)是对RGB 色彩空间中点的两种有关系的表示,它们尝试描述比 RGB 更准确的感知颜色联系,并仍保持在计算上简单.HSL 表示 hue(色相).saturation( ...

  4. python中的class

    尽管Python在Function Programming中有着其他语言难以企及的的优势,但是我们也不要忘了Python也是一门OO语言哦.因此我们关注Python在FP上的优势的同时,还得了解一下P ...

  5. C# 继承细节

    假定没有为类定义任何显式的构造函数,这样编译器就会为所有的类提供默认的构造函数,在后台会进行许多操作,编译器可以很好地解决层次结构中的所有问题,每个类中的每个字段都会初始化为默认值.但在添加了一个我们 ...

  6. ubuntu12.04中如何设定中文输入法

    安装 ibus 终端输入:sudo apt-get install ibus ibus-clutter ibus-gtk ibus-gtk3 ibus-qt4 启动 ibus 终端输入 :  im-s ...

  7. docker学习笔记15:Dockerfile 指令 USER介绍

    USER指令用于指定容器执行程序的用户身份,默认是 root用户. 在docker run 中可以通过 -u 选项来覆盖USER指令的设置. 举例:docker run -i -t -u mysql ...

  8. JAVA爬虫 WebCollector

    JAVA爬虫 WebCollector 爬虫简介: WebCollector是一个无须配置.便于二次开发的JAVA爬虫框架(内核),它提供精简的的API,只需少量代码即可实现一个功能强大的爬虫. 爬虫 ...

  9. 响应式设计:理解设备像素,CSS像素和屏幕分辨率

    概述 屏幕分辨率.设备像素和CSS像素这些术语,在非常多语境下,是可互换的,但也因此easy在有差异的地方引起混淆,实际上它们是不同的概念. 屏幕分辨率和设备像素是物理概念,而CSS像素是WEB编程的 ...

  10. windows下以指定用户访问SMB服务器进行读写

    需求:最近要开发某系统前端界面,但是该系统是部署在linux服务器上,前端是用php开发,实时调试运行需要linux下系统环境支持, 每次修改都需要手动传到服务器上,尤其是debug阶段,每修改一点就 ...