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项目运行的过程和场景切换步骤的更多相关文章

  1. log4j 日志信息的引入(通用版)——解决项目运行过程中的日志信息

    定义 log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程 ...

  2. React Native 项目运行在 Web 浏览器上面

    React Native 的出现,让前端工程师拥有了使用 JavaScript 编写原生 APP 的能力.相比之前的 Web app 来说,对于性能和用户体验提升了非常多. 但是 React Nati ...

  3. ionic 运行过程中动态切换API服务器地址

    ionic 运行过程中动态切换API服务器地址 keywords: ionic,phonegap,cordova,网络制式,动态切换,变更,API,服务器地址,$resource,localstora ...

  4. Eclipse 中构建 Maven 项目的完整过程 - SpringBoot 项目

    进行以下步骤的前提是你已经安装好本地maven库和eclipse中的maven插件了(有的eclipse中已经集成了maven插件) 一.Maven项目的新建 1.鼠标右键---->New--- ...

  5. 使用IntelliJ IDEA创建Maven聚合工程、创建resources文件夹、ssm框架整合、项目运行一体化

    一.创建一个空的项目作为存放整个项目的路径 1.选择 File——>new——>Project ——>Empty Project 2.WorkspaceforTest为项目存放文件夹 ...

  6. django-celery定时任务以及异步任务and服务器部署并且运行全部过程

    Celery 应用Celery之前,我想大家都已经了解了,什么是Celery,Celery可以做什么,等等一些关于Celery的问题,在这里我就不一一解释了. 应用之前,要确保环境中添加了Celery ...

  7. 【转载】使用IntelliJ IDEA创建Maven聚合工程、创建resources文件夹、ssm框架整合、项目运行一体化

    一.创建一个空的项目作为存放整个项目的路径 1.选择 File——>new——>Project ——>Empty Project 2.WorkspaceforTest为项目存放文件夹 ...

  8. 关于Scrapy爬虫项目运行和调试的小技巧(下篇)

    前几天给大家分享了关于Scrapy爬虫项目运行和调试的小技巧上篇,没来得及上车的小伙伴可以戳超链接看一下.今天小编继续沿着上篇的思路往下延伸,给大家分享更为实用的Scrapy项目调试技巧. 三.设置网 ...

  9. 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 ...

随机推荐

  1. PLSQL_统计信息系列03_统计信息的收集

    20150506 Created By Baoxinjian

  2. android自定义控件实例

    很多时候android常用的控件不能满足我们的需求,那么我们就需要自定义一个控件了.今天做了一个自定义控件的实例,来分享下. 首先定义一个layout实现按钮内部布局: 01 <?xml ver ...

  3. Solutions for the Maximum Subsequence Sum Problem

    The maximum subarray problem is the task of finding the contiguous subarray within a one-dimensional ...

  4. Linux中网络通信中 使用的结构体

    "+++++++++++++++++++++++++ Linux TCP/UDP通信中的结构体 +++++++++++++++++++++++++++++++++++++++" s ...

  5. Python之反射练习

    # 什么是反射?可以用字符串的方式去访问对象的属性 class Test(): _name = "sss" def fun(self): return "Hellowor ...

  6. Solr4:配置Data Import,从数据库直接创建索引

    1. 要求 将数据库中的数据直接创建到Solr索引中去.先做全部索引,然后定期做增量索引. 2. 环境 Solr4.4版本,Tomcat7.0版本,Oracle 11g,已经配置好Tomcat与Sol ...

  7. ISE联合modelsim功能仿真和综合后仿真

    1.代码输入 (1).新建一个ISE工程,名字为count4. (2).新建一个verilog文件 (3).选择verilog module 输入file name为count4,单击next默认知道 ...

  8. 【Android】3.2 基本地图功能

    分类:C#.Android: 日期:2016-02-04 3.2 示例2--基本地图功能 一.简介 1.地图 地图展示:普通地图(2D,3D).卫星图和实时交通图. 地图操作:可通过接口或手势控制来实 ...

  9. Flink articles

    http://ictlabs-summer-school.sics.se/2015/slides/flink-advanced.pdf http://henning.kropponline.de/20 ...

  10. [转]C#通过Http发送Soap请求

    /// <summary>        /// 发送SOAP请求,并返回响应xml        /// </summary>        /// <param na ...