场景切换函数:

  • Director->getInstance()->replaceScene(Scene*);
  • Director->getInstance()->runWithScene(Scene*);

两者的区别在于,如果有Scene存在,使用第一个;第一次运行场景,用第二个。

下面是一个切换场景的关键代码。单击文本跳转到下一个场景。要切换到的场景ImageScene继承自Layer,定义了3个成员函数init,createScene,CREATE_FUNC。

ImageScene.h如下:

 #ifndef _IMAGESCENE_H_
#define _IMAGESCENE_H_ #include<iostream>
#include<cocos2d.h>
USING_NS_CC; class ImageScene :public Layer{
public:
virtual bool init();
static Scene* createScene();
CREATE_FUNC(ImageScene);
};
#endif

ImageScene.cpp如下:

 #include"ImageScene.h"

 Scene* ImageScene::createScene(){
Scene *scene = Scene::create();
ImageScene *layer = ImageScene::create();
scene->addChild(layer); return scene;
}
bool ImageScene::init(){
if (!Layer::init()){
return false;
} Size size = Director::getInstance()->getVisibleSize(); Sprite *s = Sprite::create("HelloWorld.png");
s->setPosition(size.width/, size.height/);
addChild(s); return true;
}

关键代码:

 bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !Layer::init() )
{
return false;
}
Size visibleSize = Director::getInstance()->getVisibleSize();
Point origin = Director::getInstance()->getVisibleOrigin(); LabelTTF *label = LabelTTF::create("Show Next Scene", "Courier", );
addChild(label); label->setPosition(visibleSize.width/, visibleSize.height/); EventListenerTouchOneByOne *listener = EventListenerTouchOneByOne::create(); listener->onTouchBegan = [label](Touch *t, Event *e){
if (label->getBoundingBox().containsPoint(t->getLocation())){
Director::getInstance()->replaceScene(ImageScene::createScene());
return true;
}
return false;
};
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, label);
return true;
}

运行效果:

场景切换效果能让场景的切换不显得突兀。场景切换效果主要是TransitionScene的子类实现的。

修改关键代码的第21行

Director::getInstance()->replaceScene(TransitionFade::create(3.0f, ImageScene::createScene()));

切换效果:

Action动作

类的主要继承关系图

关键代码:

  • label->runAction(MoveTo::create(1.0f, Point(100, 100)));
  • label->runAction(MoveTo::create(1.0f, Point(-100, -100))->reverse());//MoveTo::reserve()在cocos2d-x3.5之后被屏蔽了,因为没有意义
  • label->runAction(MoveBy::create(1.0f, Point(-10, -10)));
  • label->runAction(MoveBy::create(1.0f, Point(10, 10))->reverse());//效果和上面一句相同,reverse是反转执行。

效果是不同的,运行效果:

详细代码如下:

bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !Layer::init() )
{
return false;
} Size visibleSize = Director::getInstance()->getVisibleSize(); LabelTTF *label = LabelTTF::create("Hello, Cocos", "Courier", );
label->setPosition(visibleSize.width / , visibleSize.height / );
addChild(label); EventListenerTouchOneByOne *listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [label](Touch* t,Event* e){
if (label->getBoundingBox().containsPoint(t->getLocation())){
label->runAction(MoveTo::create(1.0f, Point(, )));
//label->runAction(MoveBy::create(1.0f, Point(-10,-10)));
}
return false;
};
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, label);
return true;
}

Repeat/RepeatForever:

//在1秒内完成180度旋转,重复3次。

label->runAction(Repeat::create(RotateBy::create(1.0f, 180), 3));

//在1秒内完成180度旋转,一直重复。
label->runAction(RepeatForever::create(RotateBy::create(1.0f, 180)));

运行结果:

动作混合:Spawn类

//label会一边移动一边旋转

//在末尾写一个NULL,标识数组的结束。
label->runAction(Spawn::create(MoveBy::create(1, Point(100, 100)), RotateBy::create(1, 360), NULL));

运行效果:

动作序列:Sequence类

//label先移动,然后再旋转

//在末尾写一个NULL, 标识数组的结束

label->runAction(Sequence::create(MoveBy::create(1, Point(100, 100), RotateBy::create(1, 360)), NULL));

运行效果:

动作的监听:

CallFunc类继承自FiniteTimeAction,所以可以用这个类来实现监听效果。

//label先移动,然后再旋转,旋转结束之后,弹出一个弹框。

label->runAction(Sequence::create(
MoveBy::create(, Point(, )),
RotateBy::create(, ),
CallFunc::create([](){
MessageBox("Action Complete", "Complete");
}), NULL));

运行结果:

附上本节所有源码:

bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !Layer::init() )
{
return false;
} Size visibleSize = Director::getInstance()->getVisibleSize(); LabelTTF *label = LabelTTF::create("Hello, Cocos", "Courier", );
label->setPosition(visibleSize.width / , visibleSize.height / );
addChild(label); EventListenerTouchOneByOne *listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [label](Touch* t,Event* e){
if (label->getBoundingBox().containsPoint(t->getLocation())){
//label->runAction(MoveTo::create(1.0f, Point(100, 100)));
//label->runAction(MoveBy::create(1.0f, Point(-10,-10)));
//label->runAction(MoveBy::create(1.0f, Point(10, 10))->reverse());//效果和上面一句相同
//label->runAction(Repeat::create(RotateBy::create(1.0f, 180), 3));
//label->runAction(RepeatForever::create(RotateBy::create(1.0f, 180)));
//在末尾写一个NULL,标识数组的结束。
//label->runAction(Spawn::create(MoveBy::create(1, Point(100, 100)), RotateBy::create(1, 360), NULL));
//label->runAction(Sequence::create(MoveBy::create(1, Point(100, 100)), RotateBy::create(1, 360), NULL));
label->runAction(Sequence::create(
MoveBy::create(, Point(, )),
RotateBy::create(, ),
CallFunc::create([](){
MessageBox("Action Complete", "Complete");
}), NULL)); }
return false;
};
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, label);
return true;
}

五毛的cocos2d-x学习笔记05-场景与场景动画,动作的更多相关文章

  1. 机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归

    机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归 关键字:Logistic回归.python.源码解析.测试作者:米仓山下时间:2018- ...

  2. C++ GUI Qt4学习笔记05

    C++ GUI Qt4学习笔记05   qtc++正则表达式 QIntValidator           --  只让用户输入整数 QDoubleValidator     --  只让用户输入浮 ...

  3. React Native 学习笔记--进阶(二)--动画

    React Native 进阶(二)–动画 动画 流畅.有意义的动画对于移动应用用户体验来说是非常必要的.我们可以联合使用两个互补的系统:用于全局的布局动画LayoutAnimation,和用于创建更 ...

  4. ArcGIS API for JavaScript 4.2学习笔记[21] 对3D场景上的3D要素进行点击查询【Query类学习】

    有人问我怎么这个系列没有写自己做的东西呢? 大哥大姐,这是"学习笔记"啊!当然主要以解读和笔记为主咯. 也有人找我要实例代码(不是示例),我表示AJS尚未成熟,现在数据编辑功能才简 ...

  5. ‎Cocos2d-x 学习笔记(3.1) Scene 场景与场景切换

    1. Scene 简介 游戏中我们看到/看不到的所有元素都是展示在场景之Scene上. 我们可以把场景比作放在地上的没盖纸箱,层Layer是纸箱里堆放的玻璃,Sprite等元素画在玻璃Layer上,这 ...

  6. cocos2d-x实战 C++卷 学习笔记--第6章 场景与层

    前言: 一个场景(Scene)是由多个层(Layer)组成,而且层的个数要至少是1,不能为0. 场景切换 场景切换相关函数 1)void  runWithScene(Scene*  scene) 该函 ...

  7. [Golang学习笔记] 05 程序实体2 作用域访问权限和变量重声明

    作用域访问权限: 程序实体访问权限(作用域)有三种:1. 包级私有(代码包)2. 模块级私有(代码包)3. 公开(全域). 一个函数是一个代码块.一个程序实体的作用域总是会被限制在某个代码块中.好处: ...

  8. stm32寄存器版学习笔记05 PWM

    STM32除TIM6和TIM7外都可以产生PWM输出.高级定时器TIM1和TIM8可以同时产生7路PWM,通用定时器可以产生4路PWM输出. 1.TIM1 CH1输出PWM配置步骤 ①开启TIM1时钟 ...

  9. [原创]java WEB学习笔记05:Servlet中的ServletConfig对象

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  10. Bash脚本编程学习笔记05:用户交互与脚本调试

    用户交互 在<学习笔记04>中我们有提到位置参数,位置参数是用来向脚本传递参数的一种方式.还有一种方式,是read命令. [root@c7-server ~]# read name alo ...

随机推荐

  1. [Java]使用队列求解josephus问题

    约瑟夫斯问题(有时也称为约瑟夫斯置换),是一个出现在计算机科学和数学中的问题.在计算机编程的算法中,类似问题又称为约瑟夫环. 有个囚犯站成一个圆圈,准备处决.首先从一个人开始,越过个人(因为第一个人已 ...

  2. C语言迭代求解

    date : 2013/8/12           desinger :pengxiaoen 今天看  国外电子信息科学经典教材系列   <电子电路分析与设计> 电子工业出版社的 的19 ...

  3. 一維條碼 EAN13 的編碼方式

    何謂 EAN-13碼 ? ▲ 國家代號(3位數) 中華民國的國家代號為471. ▲ 廠商代號(6位數) 由本會核發給廠商6位數的廠商代號. ▲ 商品代號(3位數) 由廠商自行編定,按一物一號的原則,不 ...

  4. 将 SQL Server 实例设置为自动启动(SQL Server 配置管理器)

    本主题说明如何使用 SQL Server 配置管理器在 SQL Server 2012 中将 SQL Server 实例设置为自动启动. 在安装过程中,SQL Server 通常配置为自动启动. 如果 ...

  5. 深入浅出Win32多线程程序设计之基本概念

    一.深入浅出Win32多线程程序设计之基本概念[转] 引言 从单进程单线程到多进程多线程是操作系统发展的一种必然趋势,当年的DOS系统属于单任务操作系统,最优秀的程序员也只能通过驻留内存的方式实现所谓 ...

  6. Dialog with HTML skin using CDHtmlDialog and SetWindowRgn

    Introduction This program demonstrates how to use CDHtmlDialog and SetWindowRgn functions to give a ...

  7. 《windows程序设计》学习_2.2:初识消息,双键的使用

    /* 双键的使用 */ #include <windows.h> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); int WINAPI ...

  8. Mac经常使用快捷键

    Mac使用快捷键会节省非常多时间.使用最多的键就是shift键  option键 command键的组合了.当然一下略微用得多一点点,还有非常多快捷键没一一列举了 进入指定文件夹的一些快捷键 进入 A ...

  9. xcode 不值钱的动画UIImageView

    了解 animateWithDuration方法 制作动画变得不值钱 代码创建一个UIImageView 后加入self.view 容器中 调用点击屏幕touchesBegan 方法执行动画 #imp ...

  10. 虎扯:小众玩物 webkit家的滚动条

    前面的话:对只有一种浏览器支持的属性,就不要出来秀咱前端同学,就像是早些年手机们的充电口一样,集各家所长,咱今天说的是webkit的滚动条样式,视乎只有webkit支持此项定义,有见识的前辈来辩.这玩 ...