关于Cocos2d-x项目运行的过程和场景切换步骤
1.AppDelegate.cpp文件里面的applicationDidFinishLaunching函数其实可以看做C语言里面的main函数,是整个游戏运行的入口
这个函数里面的语句
auto scene = HelloWorld::createScene(); //创建一个HelloWorld类型的场景,其实是一个带着层,层中带着节点的场景
// run
director->runWithScene(scene); //运行这个场景
2.HelloWorld类是一个继承自层的类,.h文件里面有三个函数的声明,第二个和第三个是自己的初始化函数和构造函数,第一个是创建场景特意写的一个函数声明,HelloWorld是一个继承自层却可以创建场景的特殊类
static cocos2d::Scene* createScene();
virtual bool init();
CREATE_FUNC(HelloWorld);
3.HelloWorld.cpp文件有两个函数的定义,分别是.h文件里面第一个和第二个函数的定义,把自己的构造函数的定义省略了
Scene* HelloWorld::createScene()
{
auto scene = Scene::create(); //创建一个场景实例
auto layer = HelloWorld::create(); //创建一个HelloWorld类型的层实例,这里会调用默认的构造函数和HelloWorld::init函数
scene->addChild(layer); //把这个层实例添加到了场景实例中
return scene; //返回场景实例
}
4..HelloWorld.cpp文件中的init函数的定义,是HelloWorld类自己的初始化定义,在HelloWorld::create()被调用时调用,是对实例层的定义
bool HelloWorld::init()
{
if ( !Layer::init() ) //先执行父类init
{
return false;
}
auto rootNode = CSLoader::createNode("MainScene.csb"); //创建一个节点(其实可以是各种类型的节点,Node,Sprite...)
addChild(rootNode); //添加节点到层实例
return true; //init成功,返回true
}
场景切换的步骤
1.要实现切换就要有多个场景,所以创建一些场景类,像GameStar和GameOver还有GameScene,这些场景类是继承自层的,且它的写法要和HelloWorld类的写法一样,在.h文件中声明的函数要有三个,可以对函数参数进行适当的添加和改变。
static cocos2d::Scene* createScene();
virtual bool init();
CREATE_FUNC(GameOver);
2.在场景类的.cpp文件中对这三个函数进行定义
Scene* GameOver::createScene()
{
auto scene = Scene::create(); //创建一个场景实例
auto layer = GameOver::create(); //创建一个GameOver类型的层实例,这里会调用默认的构造函数和GameOver::init函数
scene->addChild(layer); //把这个层实例添加到了场景实例中
return scene; //返回场景实例
}
bool GameOver::init()
{
if ( !Layer::init() ) //先执行父类init
{
return false;
}
auto sprite = Sprite::create("gameover.png"); //创建一个节点(其实可以是各种类型的节点,Node,Sprite...)
sprite->setPosition(50,50);
addChild(sprite); //添加节点到层实例
return true; //init成功,返回true
}
3.在某个事件监听器中用这个语句切换,当判定游戏结束时就切换到游戏结束界面
Director::getInstance()->replaceScene(GameOver::createScene(_heroCount, 20));
有时候我们要让场景切换附加某种特效,比如淡入淡出,就用
auto scene = GameScene::createScene();
Director::getInstance()->replaceScene(TransitionFade::create(2, scene));;
注意:
刚开始的时候,节点的添加可以直接在HelloWorld的init函数的定义中直接auto相应的对象并获得实例,再把实例添加到HelloWorld层中来显示,这里还要设置节点的位置(节点的大小还有其他属性在各自类的init函数中定义),后期要把这些节点的添加代码另外用一个GameController类来管理
关于Cocos2d-x项目运行的过程和场景切换步骤的更多相关文章
- log4j 日志信息的引入(通用版)——解决项目运行过程中的日志信息
定义 log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程 ...
- React Native 项目运行在 Web 浏览器上面
React Native 的出现,让前端工程师拥有了使用 JavaScript 编写原生 APP 的能力.相比之前的 Web app 来说,对于性能和用户体验提升了非常多. 但是 React Nati ...
- ionic 运行过程中动态切换API服务器地址
ionic 运行过程中动态切换API服务器地址 keywords: ionic,phonegap,cordova,网络制式,动态切换,变更,API,服务器地址,$resource,localstora ...
- Eclipse 中构建 Maven 项目的完整过程 - SpringBoot 项目
进行以下步骤的前提是你已经安装好本地maven库和eclipse中的maven插件了(有的eclipse中已经集成了maven插件) 一.Maven项目的新建 1.鼠标右键---->New--- ...
- 使用IntelliJ IDEA创建Maven聚合工程、创建resources文件夹、ssm框架整合、项目运行一体化
一.创建一个空的项目作为存放整个项目的路径 1.选择 File——>new——>Project ——>Empty Project 2.WorkspaceforTest为项目存放文件夹 ...
- django-celery定时任务以及异步任务and服务器部署并且运行全部过程
Celery 应用Celery之前,我想大家都已经了解了,什么是Celery,Celery可以做什么,等等一些关于Celery的问题,在这里我就不一一解释了. 应用之前,要确保环境中添加了Celery ...
- 【转载】使用IntelliJ IDEA创建Maven聚合工程、创建resources文件夹、ssm框架整合、项目运行一体化
一.创建一个空的项目作为存放整个项目的路径 1.选择 File——>new——>Project ——>Empty Project 2.WorkspaceforTest为项目存放文件夹 ...
- 关于Scrapy爬虫项目运行和调试的小技巧(下篇)
前几天给大家分享了关于Scrapy爬虫项目运行和调试的小技巧上篇,没来得及上车的小伙伴可以戳超链接看一下.今天小编继续沿着上篇的思路往下延伸,给大家分享更为实用的Scrapy项目调试技巧. 三.设置网 ...
- Atitit linux获取项目运行环境版本
Atitit linux获取项目运行环境版本 1.1. Nginx版本1 1.2. Php版本1 1.3. Mysql版本2 1.4. Redis版本2 1.1. Nginx版本 [root@iZ25 ...
随机推荐
- Android中判断网络连接是否可用及监控网络状态
Android中判断网络连接是否可用及监控网络状态 作者: 字体:[增加 减小] 类型:转载 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限,接下来详细介绍Android ...
- POSIX 共享内存和 系列函数
在前面介绍了system v 共享内存的相关知识,现在来稍微看看posix 共享内存 和系列函数. 共享内存简单来说就是一块真正的物理内存区域,可以使用一些函数将这块区域映射到进程的地址空间进行读写, ...
- pimpl idiom
pimpl idiom flyfish 2014-9-30 pimpl是Pointer to implementation的缩写 为什么要使用pimpl 1最小化编译依赖 2接口与实现分离 3可移植 ...
- Ext.net中Combobox如何绑定数据库中的值-通用方法
今天在项目中再次碰到了问题,就是Combobox中的值如果是直接绑定很简单.简单添加项就行了.代码如下: <ext:ComboBox ID=" /> </Items> ...
- php序列化与反序列化时字符集不一致问题的解决办法
今天的用PHP的时候无意的出现了用unserialize()函数转换老是返回false,我确认我的字符串是没错的,测试了很多次还是一样,没办法,启用了error_reporting(E_ALL)启用错 ...
- 怎么在ubuntu中新增一个用户并赋予管理员权限
用useradd时,并没有创建同名的用户主目录.例子:adduser user1这样他就会自动创建用户主目录,创建用户同名的组.root@ubuntu:~# sudo adduser db[sudo] ...
- vim利用插件管理工具-管理配置文件
目前被广泛应用的2各插件管理工具Pathogen和Vunble,我先说Pathogen Pathogen Pathogen完全用vim脚本编写,不用其他的代码(Vunble就用了python),所以安 ...
- 【Android】将Xamarin For VS升级为4.0.1.145版
分类:C#.Android.VS2015 创建日期:2016-03-18 一.卸载原来安装的Xamarin for VS 4.0.0.1717版 下面是Xamarin for VS发布的版本简介: - ...
- Untrusted 游戏 通关攻略
这个游戏还不错,用了两个晚上的时间通过并写下解法.这个游戏通过修改JS代码来通关的游戏.很考验玩家的解决问题能力,同时也有一定的可玩性. 游戏地址 http://alexnisnevich.githu ...
- android Handlerr.removeCallbacksAndMessages(null)的妙用
今天在阅读代码发现了android Handlerr.removeCallbacksAndMessages(null)代码 在ondestory()调用,之前没用过,那想弄懂咋办,查api: pub ...