关于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 ...
随机推荐
- Javascript变量名混淆细节
前言 UglifyJS会对JS文件的变量名进行混淆处理.要理解Javascript变量混淆的细节.我们须要回答下面几个问题: 1.遇到一个变量myName,我们怎么知道这个myName变量要不要混淆 ...
- Java中的static关键字的用法
1.静态方法 static:通常在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法 声明为static的方法有以下几条限制: (1)它们仅能调用其他的static方法. (2 ...
- MongoDB索引原理
转自:http://www.mongoing.com/archives/2797 为什么需要索引? 当你抱怨MongoDB集合查询效率低的时候,可能你就需要考虑使用索引了,为了方便后续介绍,先科普下M ...
- 【Android】将Xamarin For VS升级为4.0.1.145版
分类:C#.Android.VS2015 创建日期:2016-03-18 一.卸载原来安装的Xamarin for VS 4.0.0.1717版 下面是Xamarin for VS发布的版本简介: - ...
- mongo操作及相关资料
mongo操作 find方法 db.collection_name.find(); 查询所有的结果: select * from users; db.users.find(); 指定返回那些列(键): ...
- mac下为什么光标按方向键只能一个字一个字地蹦
系统偏好设置-键盘 把按键重复拉到最快,重复前延迟拉到最短
- QT学习记录(1)-控件 QPushButton, QLineEdit, QLabel, QHBoxLayout, QGridLayout
1.一个简单的QT程序(QPushButton) /* 应用程序抽象类 */ #include <QApplication> /*窗口类*/ #include <QWidget> ...
- Zookeeper运维的一些经验[转]
Zookeeper是一个分布式协调框架,有不错的性能,也经过许多公司的验证,所以在很多场景都有使用.大家一般用Zookeeper来实现服务发现(类似DNS),配置管理,分布式锁,leader选举等.在 ...
- 中文转Punycode
package cn.cnnic.ops.udf; public class GetPunycodeFromChinese { static int TMIN = 1; static int TMAX ...
- Leetcode: LRU Cache 解题报告
LRU Cache Design and implement a data structure for Least Recently Used (LRU) cache. It should supp ...