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 ...
随机推荐
- Linux 切换字符界面和图形界面
1. 切换方式 # root 权限 systemctl get-default # 获取当前模式 systemctl set-default graphical.target # 设置开机为图形界面 ...
- 使用API修改控制台输出的颜色(前景色和背景色)
1.api原型 SetConsoleTextAttribute BOOL WINAPI SetConsoleTextAttribute( _In_ HANDLE hConsoleOutput, // ...
- 微信小程序开发之日期组件
一: wxml: <view class="navbarlift" style="background:#ffffff;padding:20rpx"> ...
- 使用Postman测试请求
Postman是什么 在开发或者调试网络程序或者是网页B/S模式的程序的时候,需要一些方法来跟踪网页请求,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具. 网页调试工具Postm ...
- oracle查看表,索引,视图,存储过程的定义
通过 DBMS_METADATA 包 Oracle 的在线文档,对这个包有详细说明: DBMS_METADATA 通过该dbms_metadata包的get_ddl()方法,我们可以查看表,索引, ...
- 文本自动摘要:基于TextRank的中文新闻摘要
TextRank算法源自于PageRank算法.PageRank算法最初是作为互联网网页排序的方法,经过轻微地改动,可以被应用于文本摘要领域. 本文分为两部分,第一部分介绍TextRank做文本自动摘 ...
- Cinder服务使用
Cinder环境 Cinder配置 重新创建卷组cinder-volumes [root@openstack centos]# vgremove cinder-volumes Configuratio ...
- 模板 - SPFA
SPFA可以用来判断负环或者计算带负权的最短路. 其实带负权的最短路可以用带势Dijkstra计算-- 所以SPFA基本就拿来判负环了-- #include<bits/stdc++.h> ...
- SCUT - 12 - 西方国家 - 矩阵快速幂
https://scut.online/p/12 可以用矩阵快速幂来做. #include<bits/stdc++.h> using namespace std; typedef long ...
- 洛谷P4218 [CTSC2010]珠宝商(后缀自动机+点分治)
传送门 这题思路太清奇了……->题解 //minamoto #include<iostream> #include<cstdio> #include<cstring ...