Cocos2D-X学习笔记 3 从一个场景切换到还有一个场景

Cocos2D-X学习笔记 3 从一个场景切换到还有一个场景

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

工厂方法一般写法

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);
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118344.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 模拟电子线路复习笔记( 六) —— 集成运算放大器原理及其运用「建议收藏」

    模拟电子线路复习笔记( 六) —— 集成运算放大器原理及其运用「建议收藏」模拟电子线路复习笔记(六)——集成运算放大器原理及其运用本文是对模电的第六章的集成运算放大器原理及其运用知识点的笔记总结。全文手写,附有例题解析,帮助加深理解。1.知识点总结2.习题解析…

    2022年6月8日
    37
  • 浅析Python中bytes和str区别

    本博转载自:Chown-Jane-Y的浅析Python3中的bytes和str类型Python3最重要的新特性之一是对字符串和二进制数据流做了明确的区分。文本总是Unicode,由str类型表示,

    2021年12月29日
    37
  • Python 爬虫和数据分析实战

    Python 爬虫和数据分析实战课程介绍本课程是Python爬虫和数据分析项目实战课程,主要分3部分:第1部分是Python爬虫,主要使用Urllib3和BeautifulSoup抓取天猫商城和京东商城胸罩销售数据,并保存到SQLite数据库中;第2部分是对抓取的胸罩销售数据进行数据清洗,主要是去除空数据,让数据格式更规范;第3半部分利用Pandas对数据进行分析,以及使用M…

    2022年5月29日
    25
  • TD-SCDMA的优势「建议收藏」

    TD-SCDMA的优势「建议收藏」TD-SCDMA的优势  第二代移动通信系统(2G)(如GSM和IS-95)利用成对频带,通过上下行链路,以FDD模式运行。这些系统的设计只适用于数字化话音和低比特率数据的传输,不能满足多媒体和高比特率数据业务中宽带数据传输量不断增长的需求。第三代移动通信系统(3G)可支持高话音容量和高比特率非对称业务,以及移动无线因特网业务。它的主要特征在于可向网络运营商提供最佳频谱效率和经济效益。对运营商来讲

    2022年10月3日
    1
  • java开发区块链只需150行代码

    java开发区块链只需150行代码本文目的是通过java实战开发教程理解区块链是什么。将通过实战入门学习,用Java自学开发一个很基本的区块链,并在此基础上能扩展如web框架应用等。这个基本的java区块链也实现简单的工作量证明系统。

    2022年7月3日
    23
  • jenkins 邮件_邮件发送协议邮件接收协议

    jenkins 邮件_邮件发送协议邮件接收协议前言前面已经实现在jenkins上展示html的测试报告,接下来只差最后一步,把报告发给你的领导,展示你的劳动成果了。安装EmailExtensionPlugin插件jenkins首页-

    2022年8月6日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号