Cocos2d-x 3.2 学习笔记(七)Scene And Transition

Scene 场景。

是一个抽象的概念,仅被用作Node(节点)的一个子类.

Scene (场景)和Node(节点)几乎相同,不同的是Scene的默认锚点在屏幕的中心.

关于场景,不得不提的是场景之间的切换!效果挺炫的!下面看看33种切换效果,可以根据需要选择和扩展。

#ifndef __SceneTest__
#define __SceneTest__

#include "cocos2d.h"
USING_NS_CC;
class SceneTest : public Layer
{
public:
    static Scene* createScene();
    CREATE_FUNC(SceneTest);
    virtual bool init();
    bool onToucheBegans(Touch* touch,Event* ev);
};

class SceneConfig
{
public:
    static SceneConfig* getInstance();
    int getIndex();
    void setIndex(int index);
    std::string getBg();
protected:
private:

};

#endif

SceneTest.h

#include "SceneTest.h"

static const char s_bg1[]="background1.png";
static const char s_bg2[]="HelloWorld.png";
#define str(name) #name
#define CL(classname) [](){auto scene = classname ::create(1.2f , SceneTest::createScene());log(str(classname));return scene;}
#define CLN(classname) [](){auto scene = classname ::create(1.2f , SceneTest::createScene(),false);log(str(classname));return scene;}
#define CLS(classname) [](){auto scene = classname ::create(1.2f , SceneTest::createScene(),ccc3(255, 0, 0));log(str(classname));return scene;}
#define CLM(classname) [](){auto scene = classname ::create(1.2f , SceneTest::createScene(),TransitionScene::Orientation::LEFT_OVER);log(str(classname));return scene;}

static std::function<Scene*()> createFunctions[] = {
    CL(TransitionJumpZoom),//作用: 创建一个跳动的过渡动画
    CL(TransitionProgressRadialCCW), //    作用: 创建一个扇形条形式的过渡动画, 逆时针方向
    CL(TransitionProgressRadialCW),//    作用: 创建一个扇形条形式的过渡动画, 顺时针方向
    CL(TransitionProgressHorizontal),//    作用: 创建一个水平条形式的过渡动画
    CL(TransitionProgressVertical),//    作用: 创建一个垂直条形式的过渡动画
    CL(TransitionProgressInOut),//    作用: 创建一个由里向外扩展的过渡动画
    CL(TransitionProgressOutIn),//    作用: 创建一个由外向里扩展的过渡动画
    CL(TransitionCrossFade),//    作用:创建一个逐渐透明的过渡动画
    CL(TransitionFadeTR),//    作用:创建一个部落格过渡动画, 从左下到右上
    CL(TransitionFadeBL),//    作用:创建一个部落格过渡动画, 从右上到左下
    CL(TransitionFadeUp),//    作用:创建一个从下到上,条形折叠的过渡动画
    CL(TransitionFadeDown),//    作用:创建一个从上到下,条形折叠的过渡动画
    CL(TransitionTurnOffTiles),//    作用:创建一个随机方格消失的过渡动画
    CL(TransitionSplitRows),//    作用:创建一个分行划分切换的过渡动画
    CL(TransitionSplitCols), //    作用:创建一个分列划分切换的过渡动画
    CL(TransitionShrinkGrow),//    创建一个放缩交替的过渡动画
    CL(TransitionRotoZoom),// 创建一个旋转放缩交替的过渡动画
    CL(TransitionMoveInL),//    作用:创建一个从左边推入覆盖的过渡动画
    CL(TransitionMoveInR),//    作用:创建一个从右边推入覆盖的过渡动画
    CL(TransitionMoveInB),//    作用:创建一个从下边推入覆盖的过渡动画
    CL(TransitionMoveInT),//    作用:创建一个从上边推入覆盖的过渡动画
    CL(TransitionSlideInL),//    作用:创建一个从左侧推入并顶出旧场景的过渡动画
    CL(TransitionSlideInR),//    作用:创建一个从右侧推入并顶出旧场景的过渡动画
    CL(TransitionSlideInT), //    作用:创建一个从顶部推入并顶出旧场景的过渡动画
    CL(TransitionSlideInB),//    作用:创建一个从下部推入并顶出旧场景的过渡动画
    CLN(TransitionPageTurn),//    作用:创建一个翻页的过渡动画
    CLS(TransitionFade),//    作用:创建一个逐渐过渡到目标颜色的切换动画
    CLM(TransitionFlipX),//    作用:创建一个x轴反转的切换动画
    CLM(TransitionFlipY),//    作用:创建一个Y轴反转的切换动画
    CLM(TransitionFlipAngular),//    作用:创建一个带有反转角切换动画
    CLM(TransitionZoomFlipX),//     作用:创建一个带有缩放的x轴反转切换的动画
    CLM(TransitionZoomFlipY),//     作用:创建一个带有缩放的Y轴反转切换的动画
    CLM(TransitionZoomFlipAngular)//     作用:创建一个带有缩放 ,反转角切换的动画
};

Scene* SceneTest::createScene()
{
    auto scene = Scene::create();
    auto layer = SceneTest::create();
    scene->addChild(layer);
    return scene;
}

bool SceneTest::init()
{
    auto sprite = Sprite::create(SceneConfig::getInstance()->getBg());
    Size visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();
    sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
    this->addChild(sprite, 0);
    auto eventListener = EventListenerTouchOneByOne::create();
    eventListener->onTouchBegan = CC_CALLBACK_2(SceneTest::onToucheBegans,this);
    this->_eventDispatcher->addEventListenerWithSceneGraphPriority(eventListener,this);
    return true;
}
#define MAX_LAYER (sizeof(createFunctions) / sizeof(createFunctions[0]))
bool SceneTest::onToucheBegans(Touch* touch,Event* ev)
{
    auto idx = SceneConfig::getInstance()->getIndex();
    idx++;
    idx = idx%MAX_LAYER;
    SceneConfig::getInstance()->setIndex(idx);
    auto reScene = createFunctions[idx]();
    Director::getInstance()->setDepthTest(false);
    Director::getInstance()->replaceScene(reScene);
    return true;
}

static SceneConfig* config;
static int _index;
SceneConfig* SceneConfig::getInstance()
{
    if( !config )
    {
        config = new SceneConfig();
        _index = 0;
    }
    return config;
}

int SceneConfig::getIndex()
{
    return _index;
}

void SceneConfig::setIndex(int index)
{
    _index = index;
}
std::string SceneConfig::getBg()
{
    auto index = _index;
    if( index%2 > 0 )
    {
        return s_bg1;
    }
    else
    {
        return s_bg2;
    }
}

SceneTest.cpp

点击屏幕看看效果吧。

  CL(TransitionJumpZoom),//作用: 创建一个跳动的过渡动画
    CL(TransitionProgressRadialCCW), //    作用: 创建一个扇形条形式的过渡动画, 逆时针方向
    CL(TransitionProgressRadialCW),//    作用: 创建一个扇形条形式的过渡动画, 顺时针方向
    CL(TransitionProgressHorizontal),//    作用: 创建一个水平条形式的过渡动画
    CL(TransitionProgressVertical),//    作用: 创建一个垂直条形式的过渡动画
    CL(TransitionProgressInOut),//    作用: 创建一个由里向外扩展的过渡动画
    CL(TransitionProgressOutIn),//    作用: 创建一个由外向里扩展的过渡动画
    CL(TransitionCrossFade),//    作用:创建一个逐渐透明的过渡动画
    CL(TransitionFadeTR),//    作用:创建一个部落格过渡动画, 从左下到右上
    CL(TransitionFadeBL),//    作用:创建一个部落格过渡动画, 从右上到左下
    CL(TransitionFadeUp),//    作用:创建一个从下到上,条形折叠的过渡动画
    CL(TransitionFadeDown),//    作用:创建一个从上到下,条形折叠的过渡动画
    CL(TransitionTurnOffTiles),//    作用:创建一个随机方格消失的过渡动画
    CL(TransitionSplitRows),//    作用:创建一个分行划分切换的过渡动画
    CL(TransitionSplitCols), //    作用:创建一个分列划分切换的过渡动画
    CL(TransitionShrinkGrow),//    创建一个放缩交替的过渡动画
    CL(TransitionRotoZoom),// 创建一个旋转放缩交替的过渡动画
    CL(TransitionMoveInL),//    作用:创建一个从左边推入覆盖的过渡动画
    CL(TransitionMoveInR),//    作用:创建一个从右边推入覆盖的过渡动画
    CL(TransitionMoveInB),//    作用:创建一个从下边推入覆盖的过渡动画
    CL(TransitionMoveInT),//    作用:创建一个从上边推入覆盖的过渡动画
    CL(TransitionSlideInL),//    作用:创建一个从左侧推入并顶出旧场景的过渡动画
    CL(TransitionSlideInR),//    作用:创建一个从右侧推入并顶出旧场景的过渡动画
    CL(TransitionSlideInT), //    作用:创建一个从顶部推入并顶出旧场景的过渡动画
    CL(TransitionSlideInB),//    作用:创建一个从下部推入并顶出旧场景的过渡动画
    CLN(TransitionPageTurn),//    作用:创建一个翻页的过渡动画
    CLS(TransitionFade),//    作用:创建一个逐渐过渡到目标颜色的切换动画
    CLM(TransitionFlipX),//    作用:创建一个x轴反转的切换动画
    CLM(TransitionFlipY),//    作用:创建一个Y轴反转的切换动画
    CLM(TransitionFlipAngular),//    作用:创建一个带有反转角切换动画
    CLM(TransitionZoomFlipX),//     作用:创建一个带有缩放的x轴反转切换的动画
    CLM(TransitionZoomFlipY),//     作用:创建一个带有缩放的Y轴反转切换的动画
    CLM(TransitionZoomFlipAngular)//     作用:创建一个带有缩放 ,反转角切换的动画

Cocos2d-x 3.2 学习笔记(七)Scene And Transition

时间: 2024-10-01 05:41:53

Cocos2d-x 3.2 学习笔记(七)Scene And Transition的相关文章

第十七篇:博采众长--初探WDDM驱动学习笔记(七)

基于WDDM驱动的DirectX视频加速重定向框架设计与实现 现在的研究生的论文, 真正质量高的, 少之又少, 开题开得特别大, 动不动就要搞个大课题, 从绪论开始到真正自己所做的内容之间, 是东拼西凑地抄概念, 抄公式, 达到字数篇幅的要求, 而自己正真做了什么, 有哪些实际感受, 做出的内容, 相比前面的东拼西凑就几点内容, 之后就草草结束, 步入感谢的段落. 原因不光只有学生自己, 所谓的读研, 如果没有一个环境, 学生有再大的愿望, 再强的毅力, 到头来也只是空无奈. 有些导师要写书,

马哥学习笔记七——LAMP编译安装之MYSQL

1.准备数据存放的文件系统 新建一个逻辑卷,并将其挂载至特定目录即可.这里不再给出过程. 这里假设其逻辑卷的挂载目录为/mydata,而后需要创建/mydata/data目录做为mysql数据的存放目录. 2.新建用户以安全方式运行进程: # groupadd -r mysql # useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql # chown -R mysql:mysql /mydata/data 3.安装并初始化my

Lua学习笔记(七):迭代器与泛型for

1.迭代器与闭包 迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素.在Lua中我们常常使用函数来描述迭代器,每次调用该函数就返回集合的下一个元素. 迭代器需要保留上一次成功调用的状态和下一次成功调用的状态,也就是他知道来自于哪里和将要前往哪里.闭包提供的机制可以很容易实现这个任务.记住:闭包是一个内部函数,它可以访问一个或者多个外部函数的外部局部变量.每次闭包的成功调用后这些外部局部变量都保存他们的值(状态).当然如果要创建一个闭包必须要创建其外部局部变量.所以一个典型的闭包的结构包含

python学习笔记七:条件&循环语句

1.print/import更多信息 print打印多个表达式,使用逗号隔开 >>> print 'Age:',42 Age: 42   #注意个结果之间有一个空格符 import:从模块导入函数 import 模块 from 模块 import 函数 from 模块 import * 如果两个模块都有open函数的时候, 1)使用下面方法使用: module1.open()... module2.open()... 2)语句末尾增加as子句 >>> import ma

swift学习笔记(七)自动引用计数

与Object-c一样,swift使用自动引用计数来跟踪并管理应用使用的内存.当实例不再被使用时,及retainCount=0时,会自动释放是理所占用的内存空间. 注:引用计数仅适用于类的实例,因为struct和enumeration属于值类型,也就不牵涉引用,所以其存储和管理方式并不是引用计数. 当一个实例被初始化时,系统会自动分配一定的内存空间,用于管理属性和方法.当实例对象不再被使用时,其内存空间被收回. swift中的引用类型分为三种,即Strong强引用,weak弱引用和无主引用unw

Swift学习笔记七:闭包

闭包可以 捕获 和存储其所在上下文中任意常量和变量的引用. Swift 会为您管理在 捕获 过程中涉及到的内存操作. 在 函数 章节中介绍的全局和嵌套函数实际上也是特殊的闭包,闭包采取如下三种形式之一: 1. 全局函数是一个有名字但不会捕获任何值的闭包 2. 嵌套函数是一个有名字并可以捕获其封闭函数域内值的闭包 3. 闭包表达式是一个可以捕获其上下文中变量或常量值的没有名字的闭包 一.闭包表达式 闭包函数类似于Objective-C中的block.下面我们用事实说话: let counts =

Linux System Programming 学习笔记(七) 线程

1. Threading is the creation and management of multiple units of execution within a single process 二进制文件是驻留在存储介质上,已被编译成操作系统可以使用,准备执行但没有正运行的休眠程序 进程是操作系统对 正在执行中的二进制文件的抽象:已加载的二进制.虚拟内存.内核资源 线程是进程内的执行单元 processes are running binaries, threads are the smal

CCNA学习笔记七——路由概述

静态路由协议: 动态路由协议:AS(自治系统):执行统一路由策略的一组设备的集合 EGP(外部网关协议): BGP:边界网关协议 IGP(内部网关协议): 距离矢量协议: RIP:V1,V2 IGRP EIGRP 链路状态路由协议: OSPF IS-IS 静态路由: 特点: 路由表是手工设置的 除非网络管理员干预,否则静态路由不会发生变化 路由表的形成不需要占用网络资源 适合环境 一般用于网络规模很小,拓扑结构固定的网络中 默认路由: 特点: 在所有路由类型中,默认路由优先级最低 适用环境: 一

[傅里叶变换及其应用学习笔记] 七. 傅里叶正(反)变换复习

这份是本人的学习笔记,课程为网易公开课上的斯坦福大学公开课:傅里叶变换及其应用. 傅里叶变换没有统一的定义 符号 傅里叶变换的符号在不同的书籍可能有不同的写法: 如正变换的符号:$\eta f(s)$,$\hat{f}(s)$,$F(s)$ 如反变换的符号:$\eta^{-1}f(t)$,$\check{f}(t)$,$f(t)$ 公式 傅里叶变换的公式也没有统一的写法: 本课程采用的是如下公式 $\eta f(s) = \displaystyle{\int_{-\infty}^{\infty}

SQLite学习笔记(七)&amp;&amp;事务处理

说到事务一定会提到ACID,所谓事务的原子性,一致性,隔离性和持久性.对于一个数据库而言,通常通过并发控制和故障恢复手段来保证事务在正常和异常情况下的ACID特性.sqlite也不例外,虽然简单,依然有自己的并发控制和故障恢复机制.Sqlite学习笔记(五)&&SQLite封锁机制 已经讲了一些锁机制的原理,本文将会详细介绍一个事务从开始,到执行,最后到提交所经历的过程,其中会穿插讲一些sqlite中锁管理,缓存管理和日志管理的机制,同时会介绍在异常情况下(软硬件故障,比如程序异常cras