cocos2d-x入门学习篇;切换场景
手机游戏开发最近很火爆,鉴于一直在学习c++,看起来上手就比较快了。这篇文章来自皂荚花 cocos2d-x技术,我把我的想法分享给大家。
首先来看一段代码:
CCScene* HelloWorld::scene()
{
CCScene * scene = NULL;
do
{
// 'scene' is an autorelease object
scene = CCScene::create();
CC_BREAK_IF(! scene); // 'layer' is an autorelease object
HelloWorld *layer = HelloWorld::create();
CC_BREAK_IF(! layer); // add layer as a child to scene
scene->addChild(layer);
} while (); // return the scene
这段代码是建立主场景核心代码,工程在新建后已经帮我们建好了。
bool HelloWorld::init()
{
bool bRet=false;
do
{
CC_BREAK_IF(!CCLayer::init());
CCLabelTTF *ttf=CCLabelTTF::create("next scene","Arial",); //创建文字菜单
CCMenuItemLabel *lableMenu=CCMenuItemLabel::create(ttf,this,menu_selector(HelloWorld::menuCloseCallback));
CCMenu *menu=CCMenu::create(lableMenu,NULL);
this->addChild(menu); //加到主场景中
bRet=true;
} while ();
这段代码主要是在HelloWorld场景中做些事情,包括文字的创建,按键触发menuCloseCallback。
再看按键触发的代码,其基本思想就是马上转换到第二个场景,里面可以实现一些特效。
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
// "close" menu item clicked
// CCDirector::sharedDirector()->end();
//调用下一个场景
CCTransitionFade *fade=CCTransitionFade::create(2.0,SecondScene::scene(),ccc3(,,));
CCDirector::sharedDirector()->replaceScene(fade);
}
在上面的 CCTransitionFade的静态函数create中创建SecondScene场景,cc3表示rgb颜色,表示淡入淡出的效果,这个你可以随意改变。
接下来我们来看看第二个场景的代码,首先新建一个头文件和cpp文件,名字命名为SecondScene,其中头文件代码如下:
#ifndef __SECOND_SCENE_H__
#define __SECOND_SCENE_H__ #include "cocos2d.h" #include "SimpleAudioEngine.h" class SecondScene : public cocos2d::CCLayer
{
public:
// Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
virtual bool init(); // there's no 'id' in cpp, so we recommand to return the exactly class pointer
static cocos2d::CCScene* scene(); // a selector callback
void changeScene(CCObject* pSender); //转换到第一个场景 // implement the "static node()" method manually
CREATE_FUNC(SecondScene);
};
其代码和第一个场景的代码差不多一致,只改变了场景变换的函数,把它命名为changeScene。最要的看它的场景变换是怎么实现的,在看它的cpp代码:
bool SecondScene::init()
{
bool bRet=false; do
{
CC_BREAK_IF(!CCLayer::init());
CCLabelTTF *ttf=CCLabelTTF::create("first scene","Arial",);
CCMenuItemLabel *lableMenu=CCMenuItemLabel::create(ttf,this,menu_selector(SecondScene::changeScene)); //绑定到changeScene,按键触发
CCMenu *menu=CCMenu::create(lableMenu,NULL);
this->addChild(menu);
bRet=true;
} while ();
return bRet;
}
void SecondScene::changeScene(CCObject* pSender)
{
CCDirector::sharedDirector()->setDepthTest(true); //先设置摄像头
CCTransitionPageTurn *pageTurn=CCTransitionPageTurn::create(2.0,HelloWorld::scene(),false);
CCDirector::sharedDirector()->replaceScene(pageTurn); //进行翻页,翻到上一页
//CCDirector::sharedDirector()->popScene(); //直接上这句代码的话特效消失,就直接从第二个场景变到第一个场景。
}
总结:从代码来看,我们要把握在场景初始化的时候对菜单项的基本加载,进入到下一个场景,其实就是新建一个类来实现了,充分利用c++面向对象的特性,掌握好cocos2dx的一些常用API函数,开发起来就比较简单了。总之,多思考,多写代码。
作者:曹麒文
出处:http://www.cnblogs.com/master-image/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面
cocos2d-x入门学习篇;切换场景的更多相关文章
- 响应式布局susy框架之入门学习篇
学习响应式网站设计已经持续了一段时间,对sass,less,compass,grunt等等有了整体上的了解认识,但是由于产品的不可预知性,以及前端要求使用sass语言而且不适用bootstrap,所以 ...
- sass入门学习篇(一)
先简单的介绍一下sass,如果你了解less,sass就没什么太大问题 Sass 是对 CSS 的扩展,让 CSS 语言更强大.优雅. 它允许你使用变量.嵌套规则. mixins.导入等众多功能, 并 ...
- 《Docekr入门学习篇》——Docker镜像制作
Docker镜像制作 Docker镜像的构建分为两种,一种是手动构建,一种是dockerfile(自动构建) 手动构建 基于centos镜像进行构建制作Nginx镜像 [root@rbtnode1 ~ ...
- 《Docekr入门学习篇》——Docker网络及数据卷
Docker网络设置 默认情况下docker会创建一个桥接网卡[docker 0],docker有两种映射方式,一种是随机映射,一种是指定映射. 提示:生产场景一般不使用随机映射,但是随机映射的好处是 ...
- 《Docekr入门学习篇》——Docker简介
Docker简介 什么是docker Docker是Docker.inc公司开源的一个基于LXC技术之上构建的Container容器引擎,源代码托管在GitHub上,基于Go语言并遵从Apache2. ...
- sass入门学习篇(二)
从语法开始但是语法也不是一两句的事情,首先看基本的导入,使用 一,sass有两种后缀名文件:一种后缀名为sass,不使用大括号和分号:另一种就是我们这里使用的scss文件,建议scss. 二,导入 使 ...
- 《Docekr入门学习篇》——Docker仓库harbor
Harbor Harbor仓库介绍 我们在日常Docker容器使用和管理过程中,渐渐发现部署企业私有仓库往往是很有必要的, 它可以帮助你管理企业的一些敏感镜像, 同时由于Docker Hub的下载速度 ...
- 《Docekr入门学习篇》——Docker常用命令
Docker常用命令 Docker镜像管理 搜索镜像:docker search 获取镜像:docker pull 查看镜像:docker images 删除镜像:docker rmi 构建镜像:do ...
- 《Docekr入门学习篇》——Docker实战
基础环境 root@docker~]# cat /etc/redhat-release #查看版本号 CentOS Linux release (Core) [root@docker ~]# unam ...
随机推荐
- 【opencv学习笔记三】opencv3.4.0数据类型解释
opencv提供了多种基本数据类型,我们这里分析集中常见的类型.opencv的数据类型定义可以在D:\Program Files\opencv340\opencv\build\include\open ...
- CF-816B
B. Karen and Coffee time limit per test 2.5 seconds memory limit per test 512 megabytes input standa ...
- php查询内存信息
php查询内存信息,是为了更好的查看内存使用情况,更好的优化代码. 查看当前内存使用情况使用:memory_get_usage()函数. 查看内存使用峰值:memory_get_peak_usage( ...
- 在UI程序设计中使用BackgroundWorker进行多线程异步处
WinForm的应用程序中如果执行了一个的非常冗长的处理操作,(比如文件检索,大运算量计算),在执行时就会锁定用户界面,虽然主活动窗口还在运行,但用户无法与程序交互,无法移动窗体或改变窗体大小,导致程 ...
- 如何阻止冒泡&&浏览器默认行为
摘要 很多同学对阻止事件冒泡和阻止事件默认行为容易混淆,项目中因为一些原因也需要阻止浏览器的一些默认行为,这里就简单总结一下. 阻止事件冒泡 什么是事件冒泡这里就不再赘述了,网上的文章一大把,这里就简 ...
- Unity开发Android应用优化指南(上)
http://forum.china.unity3d.com/thread-27037-1-2.html 如今越来越多的开发者使用Unity开发Android及iOS项目,开发过程中难免会遇到一些性能 ...
- springboot 之 controller
添加一个testController的java 类,部分代码 注解标记这是一个controller,配置路径,自动加载配置. 注入的方式有@Autowired 和@Resource 二者的区别是 @A ...
- P1295-创意吃鱼
题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她发现,把大池子视为01矩阵(0表示对应位置无鱼,1 ...
- W3C标准以及规范
1.什么是DOCTYPE DOCTYPE是document type(文档类型)的简写,用来说明你用的XHTML或者HTML是什么版本.其中的DTD(例如xhtml1-transitional.dtd ...
- JSP 不同版本(转)
转自 http://blog.csdn.net/sunnyyoona/article/details/51076823