Cocos2d-x 系列五之三大特效

1.场景切换
新建一个类ImageScene


#ifndef IMAGESCENE_H
#define IMAGESCENE_H
#include <iostream>
#include <cocos2d.h>

USING_NS_CC;

class ImageScene : public Layer {
public:

virtual bool init() {
Sprite *s = Sprite::create("HelloWorld.jpg");
Size size = Director::getInstance()->getVisibleSize();
s->setPosition(Point(size.width / 2, size.height / 2));
addChild(s);
return true;
};

static Scene* createScene() {
Scene *s = Scene::create();
ImageScene *layer = ImageScene::create();
s->addChild(layer);
return s;
};

CREATE_FUNC(ImageScene);
private:
};

#endif /* IMAGESCENE_H */

在最初始的scene中添加一个labelTTF,并且点击它的时候切换到下一个场景(ImageScene)


bool HelloWorld::init() {
//////////////////////////////
// 1. super init first
if (!Layer::init()) {
return false;
}
Size size = Director::getInstance()->getVisibleSize();

LabelTTF *label = LabelTTF::create("Show Next Scene", "Courier", 36);
addChild(label);
label->setPosition(Point(size.width / 2, size.height / 2));
EventListenerTouchOneByOne *listener = EventListenerTouchOneByOne::create(); //
listener->onTouchBegan = [label, size](Touch* t, Event * e) { //
Point p = t->getLocation();
p -= Point(size.width / 2, size.height / 2);
if (label->getBoundingBox().containsPoint(p)) {
log("change scene");
Director::getInstance()->replaceScene(ImageScene::createScene());
}
return false;
};
Director::getInstance()->getEventDispatcher()
->addEventListenerWithSceneGraphPriority(listener, label);// 为label添加监听
return true;
}

2.场景动画效果

往往在场景切换的时候,都需要添加一些动画,使看起来不是那么突然;

下面是一个场景切换动画效果例子,只需要将上面例子中的 Director::getInstance()->replaceScene(ImageScene::createScene()); 改为如下代码即可场景切换时添加一个动画;


Director::getInstance()->replaceScene(TransitionFadeBL::create(1, ImageScene::createScene())); // 1表示动画时长为1s

其它的场景效果可通过Api查看具体使用,在此不再一一说明;

3.cocos2d-x中的动作
>>1.动作
如果想要改变某一个node的位置,这就需要用到cocos2d-x中的动作Action了


label->runAction(MoveTo::create(1, Point(100, 100))); // 移动到(100,100),1表示动作时长1s

上面的方法是MoveTo,表示移动到某一个点,当然,也可以移动一段距离,对应的类就是MoveBy;
在cocos2d-x中,动作可以反转,下面看一句代码:


label->runAction(MoveBy::create(1, Point(50, 50))->reverse());

上面的代码,如果没有reverse,就表示向右上角移动(50,50)的距离,但是添加了reverse之后,动作就变成向左下角移动(50,50);

>>2.动作重复


    label->runAction(Repeat::create(RotateBy::create(1,180),4));// 动作重复4次
label->runAction(RepeatForever::create(RotateBy::create(1,180)));// 动作一直重复

>>3.混合动作


auto actions = Spawn::create(MoveBy::create(1, Point(100, 100)), RotateBy::create(1, 360), NULL);
label->runAction(actions);

混合动作的关键就是使用一个Spawn,将多个动作包装起来,一并执行;

>>4.序列动作


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

序列动作和混合动作的区别就是把Spawn换成Sequence,把动作添加到一个序列里边按顺序执行;

>>5.动作侦听

在一个动作执行完毕后,往往都会进行一些附加的其它操作,如同android里面的动画侦听一样;


            auto actions = Sequence::create(
MoveBy::create(1, Point(100, 100)),
RotateBy::create(1, 360),
CallFunc::create([]() {
log("Action complete");
})
, NULL); //
label->runAction(actions);

通过在创建action的时候,传入一个动作完成的侦听函数,即可实现动作的侦听;该函数返回值为void,无参数;
CallFunc *
CallFunc::create(const std::function<void()> &func)

在cocos2d-x中,已经封装好了很多的动作,在实际的使用中,可以根据这些动作来进行组合出更炫的动作;

4.帧动画


    auto cache = SpriteFrameCache::getInstance();// 获取一个帧动画缓存实例
cache->addSpriteFramesWithFile("anim.plist");// 从文件中添加一个帧动画
char name[15];
memset(name, 0, 15);//
Vector<SpriteFrame*> vec;//
for (int i = 0; i < 20; i++) {
sprintf(name, "anim%04d", i);//
vec.pushBack(cache->getSpriteFrameByName(name));
}

Animation *anim = Animation::createWithSpriteFrames(vec, 0.1f); // 根据SpriteFrame*集合 创建一个动画;
Animate *animate = Animate::create(anim); // 从动画中创建一个Animate Action;

auto sprite = Sprite::create();
addChild(sprite);
sprite->setPosition(200, 200);
sprite->runAction(RepeatForever::create(animate));

Cocos2d-x 系列五之三大特效

时间: 2024-07-30 02:38:50

Cocos2d-x 系列五之三大特效的相关文章

Apache Kafka系列(五) Kafka Connect及FileConnector示例

Apache Kafka系列(一) 起步 Apache Kafka系列(二) 命令行工具(CLI) Apache Kafka系列(三) Java API使用 Apache Kafka系列(四) 多线程Consumer方案 Apache Kafka系列(五) Kafka Connect及FileConnector示例 一. Kafka Connect简介 Kafka是一个使用越来越广的消息系统,尤其是在大数据开发中(实时数据处理和分析).为何集成其他系统和解耦应用,经常使用Producer来发送消

RX系列五 | Schedulers线程控制

RX系列五 | Schedulers线程控制 在我们上一篇文章中的,我们的小例子里有这么一段代码 //网络访问 .observeOn(Schedulers.io()) 事实上,我们在使用网络操作的时候,便可以控制其运行在哪个线程中,而Schedulers类,有四个方法,分别是 Schedulers.immediate(); Schedulers.newthread(); Schedulers.io(); Schedulers.computation(); 以及RxAndroid中的Android

MyBatis 系列五 之 关联映射

MyBatis 系列五 之 关联映射 一对多的关联映射 一对多关联查询多表数据 1.1在MyBatis映射文件中做如下配置 <!--一对多单向的连接两表的查询--> <resultMap type="Dept" id="deptMapper"> <id property="deptNo" column="deptNo"/> <result property="deptName

C语言快速入门系列(五)

C语言快速入门系列(五) C语言指针初涉                                           ------转载请注明出处:coder-pig 本节引言: 上一节我们对C语言复合数据类型中的数组进行了解析,在本节中,我们会对C语言复合数据类型中的 重点,C语言的灵魂-----指针进行学习!使用指针的好处:利用指针可以表示与使用复杂的数据结构; 更加方便地使用我们的数组与字符串;可以像汇编语言一样直接处理内存单元地址;可以动态地进行内存空间 分配,C语言指针是重点,同

互联网金融的前世、今生和未来-系列五(今生):互联网金融的有效监管

互联网金融的前世.今生和未来--系列一:山雨欲来 互联网金融的前世.今生和未来-系列二(前世):金融与技术的首次亲密接触之金融电子化 互联网金融的前世.今生和未来-系列三(今生):一场跨界的战争 互联网金融的前世.今生和未来-系列四(今生):百花齐放的互联网金融业态 今生:金融与互联网的深度融合--互联网金融 金融行业作为现代经济的核心,对国民经济的平稳运行至关重要.为防止出现金融市场失灵的情况,如内幕交易.信息不对称.信托责任.监管套利.系统性风险及羊群效应等,世界各国政府普遍会基于本国的金融

Maven 系列 五 :使用Nexus搭建Maven私服

1 . 私服简介 私服是架设在局域网的一种特殊的远程仓库,目的是代理远程仓库及部署第三方构件.有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库:否则,私服请求外部的远程仓库,将构件下载到私服,再提供给本地仓库下载.                                                  我们可以使用专门的 Maven 仓库管理软件来搭建私服,比如:Apache Archiva,Artifactory,Sonatype Nexus.这

SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型

原文:SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验. 3.熟悉或了解Microsoft SQL Server 2008中的空间数据类型. 4.具备相应(比如OGC)的GIS专业理论知识. 5.其他相关知识. 通过前面几篇文章介绍了

【C++自我精讲】基础系列五 隐式转换和显示转换

0 前言 1)C++的类型转换分为两种,一种为隐式转换,另一种为显式转换. 2)C++中应该尽量不要使用转换,尽量使用显式转换来代替隐式转换. 1 隐式转换 定义:隐式转换是系统跟据程序的需要而自动转换的. 1)C++类型(char,int,float,long,double等)的隐式转换: 算术表达式隐式转换顺序为: 1.char - int - long - double 2.float - double //1)算术表达式 int m = 10; double n = m;//n = 10

VSTO之旅系列(五):创建Outlook解决方案

原文:VSTO之旅系列(五):创建Outlook解决方案 本专题概要 引言 Outlook对象模型 自定义Outlook窗体 小结 一.引言 在上一个专题中,为大家简单介绍了下如何创建Word解决方案的,所以本专题中将为大家介绍下Outlook相关的内容.我们从Visual Studio 2010 中Office节点下的模板中我们可以看到,Outlook只有外接程序的模板,并没有提供像Word或Excel这样的文档级的模板,所以VSTO没有为Outlook解决方案创建宿主项和宿主控件(Excel