前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Cocos2D-X学习笔记 3 从一个场景切换到还有一个场景

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

作者头像
全栈程序员站长
发布2022-07-13 16:06:35
发布2022-07-13 16:06:35
3210
举报

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

工厂方法一般写法

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.cn/118344.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年12月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档