手机游戏开发最近很火爆,鉴于一直在学习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入门学习篇;切换场景的更多相关文章

  1. 响应式布局susy框架之入门学习篇

    学习响应式网站设计已经持续了一段时间,对sass,less,compass,grunt等等有了整体上的了解认识,但是由于产品的不可预知性,以及前端要求使用sass语言而且不适用bootstrap,所以 ...

  2. sass入门学习篇(一)

    先简单的介绍一下sass,如果你了解less,sass就没什么太大问题 Sass 是对 CSS 的扩展,让 CSS 语言更强大.优雅. 它允许你使用变量.嵌套规则. mixins.导入等众多功能, 并 ...

  3. 《Docekr入门学习篇》——Docker镜像制作

    Docker镜像制作 Docker镜像的构建分为两种,一种是手动构建,一种是dockerfile(自动构建) 手动构建 基于centos镜像进行构建制作Nginx镜像 [root@rbtnode1 ~ ...

  4. 《Docekr入门学习篇》——Docker网络及数据卷

    Docker网络设置 默认情况下docker会创建一个桥接网卡[docker 0],docker有两种映射方式,一种是随机映射,一种是指定映射. 提示:生产场景一般不使用随机映射,但是随机映射的好处是 ...

  5. 《Docekr入门学习篇》——Docker简介

    Docker简介 什么是docker Docker是Docker.inc公司开源的一个基于LXC技术之上构建的Container容器引擎,源代码托管在GitHub上,基于Go语言并遵从Apache2. ...

  6. sass入门学习篇(二)

    从语法开始但是语法也不是一两句的事情,首先看基本的导入,使用 一,sass有两种后缀名文件:一种后缀名为sass,不使用大括号和分号:另一种就是我们这里使用的scss文件,建议scss. 二,导入 使 ...

  7. 《Docekr入门学习篇》——Docker仓库harbor

    Harbor Harbor仓库介绍 我们在日常Docker容器使用和管理过程中,渐渐发现部署企业私有仓库往往是很有必要的, 它可以帮助你管理企业的一些敏感镜像, 同时由于Docker Hub的下载速度 ...

  8. 《Docekr入门学习篇》——Docker常用命令

    Docker常用命令 Docker镜像管理 搜索镜像:docker search 获取镜像:docker pull 查看镜像:docker images 删除镜像:docker rmi 构建镜像:do ...

  9. 《Docekr入门学习篇》——Docker实战

    基础环境 root@docker~]# cat /etc/redhat-release #查看版本号 CentOS Linux release (Core) [root@docker ~]# unam ...

随机推荐

  1. 面向对象(封装)get set的由来

    封装:是指隐藏对象的属性和实现细节,进对外提供公共访问方式 好处:将变化隔离.便于使用,提高重用性,提高安全性 封装原则:将不需要对外提供的额内容隐藏起来,把属性都隐藏,提供公共方法对其访问 pack ...

  2. Maven项目实战(1)

    一.maven的好处? 同样的项目使用maven工程来实现,它的项目源码很小: 1.依赖管理 就是对jar 包管理的过程 2.项目的一键构建 (编译-----测试----- 运行 --打包------ ...

  3. JAVA + SELENIUM--环境搭建

    一.安装JDK    可在JAVA官网http://www.java.com/zh_CN/download/ 中下载最新的JDK,并按提示安装    环境变量配置:我的电脑右键-->属性--&g ...

  4. Spring:JdbcTemplate使用指南

    Spring:JdbcTemplate使用指南 Spring:JdbcTemplate使用指南 前言: 本文指在介绍Spring框架中的JdbcTemplate类的使用方法,涉及基本的Spring反转 ...

  5. FZU2056 最大正方形(二分答案)

    Problem 2056 最大正方形 Accept: 171    Submit: 516Time Limit: 1000 mSec    Memory Limit : 32768 KB  Probl ...

  6. 反射(type和assembly)

    这里简要介绍type和assembly 自定义特性 为了理解编写自定义特性的方式,应了解一下在编译器遇到代码中某个应用自定义特性的元素时,该如何处理. [AttributeUsage(Attribut ...

  7. 数据库路由中间件MyCat - 源代码篇(3)

    此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 2. 前端连接建立与认证 Title:MySql连接建立以及认证过程client->MySql:1.T ...

  8. CSS 定位 (Positioning)概述

    div.h1 或 p 元素常常被称为块级元素. 这意味着这些元素显示为一块内容,即“块框”. 与之相反,span 和 strong 等元素称为“行内元素”,这是因为它们的内容显示在行中,即“行内框”. ...

  9. ue4 动画相关方法杂记

    加载资源文件中的 骨骼,动画,蒙太奇----------------------------------------- FName anis("/Game/FirstPerson/Anima ...

  10. elasticsearch学习(三):分布式

    es的分布式思想跟现在流行的很多开发技术的分布式一个道理.一个es 搜索服务作为一个集群,集群中存在很多节点,一个节点就是一个搜索服务器.这么多节点中,会按照一定的机制推举出一个 master节点,该 ...