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);
}
Cocos2D-X学习笔记 3 从一个场景切换到还有一个场景的更多相关文章
- EF学习笔记(十二):EF高级应用场景
学习总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 上篇链接:EF学习笔记(十一):实施继承 本篇原文链接:Advanced Entity Framework Scenari ...
- Android学习笔记(十二)——实战:制作一个聊天界面
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 运用简单的布局知识,我们可以来尝试制作一个聊天界面. 一.制作 Nine-Patch 图片 : Nine-Pa ...
- [C#学习笔记1]用csc.exe和记事本写一个C#应用程序
csc.exe是C#的命令行编译器(CSharpCompiler),可以编译C#源程序成可执行程序.它与Visual Studio等IDE(Integrated Development Environ ...
- 第十三周学习笔记(编辑器选错了重发了这一个 原博客的确周天晚上提交了orz)
并发:逻辑控制流在时间上的重叠. 构造并发程序的方法: 进程 I/O多路复用 线程 基于进程的并发编程 假设我们有两个客户端和一个服务器,服务器正在监听一个监听表述符上的请求.现在假设服务器接受了客户 ...
- 剑指Offer的学习笔记(C#篇)-- 二叉树的下一个节点(好理解版本)
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 一 . 理解题意 该题目我们可以借鉴一个非常影响不好的 ...
- cocos2d 场景切换和弹出场景、收回场景
场景弹出收回很简单 用以下代码在任意一个地方显示“设置场景”: [[CCDirector sharedDirector] pushScene:[Settings scene]]; 如果你身处“设置场景 ...
- 8 cocos2dx加入场景切换效果,控制场景切换彻底完毕之后再运行动画
1 加入场景切换效果 供场景切换的类: CCTransitionJumpZoom CCTransitionProgressRadialCCW CCTransitionProgressRadial ...
- 【EF6学习笔记】(十二)EF高级应用场景
本篇原文链接:Advanced Entity Framework Scenarios 本篇主要讲一些使用Code First建立ASP.NET WEB应用的时候除了基础的方式以外的一些扩展方式方法: ...
- Stage3D学习笔记(三):使用GPU绘制一个图片
首先准备我们需要的图片,尺寸必须是2的幂数,我修改了一下Starling的图标拿来用: 还是先看看最终效果: 代码是居于上一节的代码进行修改的: package { import com.adobe. ...
随机推荐
- cmake 学习笔记(三)
转自:http://blog.csdn.net/dbzhang800/article/details/6329314 接前面的 Cmake学习笔记(一) 与 Cmake学习笔记(二) 继续学习 cma ...
- Android Input设备debug技巧
一.驱动层 检查是否有点上报 adb shell getevent -l /dev/input/eventX 检查input设备支持的属性值 adb shell getevent -i /dev/in ...
- HDU 5091 线段树扫描线
给出N个点.和一个w*h的矩形 给出N个点的坐标,求该矩形最多能够覆盖多少个点 对每一个点point(x.y)右边生成相应的点(x+w,y)值为-1: 纵向建立线段树,从左到右扫描线扫一遍.遇到点则用 ...
- 【Hibernate】set排序
使用hibernate进行一对多操作的时候,普遍使用HashSet进行操作.但是HashSet是无序集合,对此可以使用TreeSet进行排序. 1.将HashSet改为TreeSet private ...
- 【Oracle】ORA-01722:无效数字(控制文件最后一个字段)
原因: 每一行物理数据最后都存在一个换行符. 如果integer或者number类型的字段位于控制文件的最后,最后其实都会有CR/LF的换行符,在用sqlldr导入时会把换行符也算作那个数字的一部分, ...
- 自定义UIViewController与xib文件关系深入分析
6月14日 上海 OSC 源创会开始报名啦,有很多机械键盘送哦!!! 用xcode模板向工程加入UIViewController sub class的时候,如果选中了with xib for inte ...
- hdu 4784 Dinner Coming Soon
spfa+优先队列.刚开始只用的spfa,结果tle到死.然后听队友说要用到优先队列,想了想,对时间分层的话的确每一个结点都只进队列一次即可,因为只有大时间才能更新出小时间,然后就wa成shi了.按队 ...
- Hibernate MySQL 数据库 使用别名 报 Column * Not Found
使用Hibernate 查询MySQL数据表的时候报 Column Not Found ,原因是MySQL的驱动不支持别名, 解决方案如下,在连接参数中加上 useOldAliasMetadataBe ...
- CentOS6.5实现rsync+inotify实时同步
参考博文: 参考1:CentOS6.5实现rsync+inotify实时同步 参考2:inotify-tools+rsync实时同步文件安装和配置 CentOS 6.3下rsync服务器的安装与配置 ...
- JVM -- CMS
并发的标记—清除(Concurrent Mark Sweep,缩写为 CMS)收集器,使得在整个收集的过程中只是很短的暂停应用的执行,可通过在 JVM 参数中设置-XX:UseConcMarkSwee ...