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. Android调试技巧之Eclipse行号和Logcat

    很多初入Android的开发者可能会发现经常遇到Force Close或ANR这样的问题,一般我们通过Android系统的错误日志打印工具Logcat可以看到出错的内容,今天一起来说下如何通过 Ecl ...

  2. Python acos() 函数

    描述 acos() 返回x的反余弦弧度值. 语法 以下是 acos() 方法的语法: import math math.acos(x) 注意:acos()是不能直接访问的,需要导入 math 模块,然 ...

  3. Win2008 r2 IIS7.5出现FastCGI进程最近常常失败。请过一会再尝试此请求的解决方法

    错误信息如图所示: 应用程序“PIAOYUN.CC”中的服务器错误Internet Information Services 7.5 错误摘要HTTP 错误 500.0 - Internal Serv ...

  4. 笔试面试1 用C实现C库函数itoa, atoi

    要求用C实现C库函数itoa或者是atoi.也就是字符串和数字的相互转换. 事实上这是一个很easy的问题. 可是有次笔试我没有理解好题意,也没有想到事实上这就是一个怎样将数字以字符串的方式存放. 这 ...

  5. 自己用的C++编码规范

    头文件结构 #ifndef COMMUNICATERHANDLLER_H #define COMMUNICATERHANDLLER_H #include "ace/Guard_T.h&quo ...

  6. Qt creator 编译错误:无法解析的外部符号(命令)

    问题来自于:仅仅是在creator 中加入了一个新的DIalog类,并在main(),中实例化并show.就出现例如以下的错误: main.obj:-1: error: LNK2019: 无法解析的外 ...

  7. win7下安装curl

    先去官网下载curl,地址https://winampplugins.co.uk/curl/,我下载的版本是curl_7_52_1_openssl_nghttp2_x64.然后执行curl.exe并且 ...

  8. 解决MAC下ctags -R无效的问题

    MAC下自带了ctags,与我们常用的是不同的. 我们需要去重新下载一个ctags并重新安装 1.去http://ctags.sourceforge.net/下载Ctags的最新版本源代码 2.tar ...

  9. 超烂的ELK之filebeat读取【已解决】

    搞了无数次的filebeat-->logstash今天栽了跟头 filebeat在读取如下文件的时候,openchgw.log 软连接speechgw.log.20170703183729文件 ...

  10. python3打印26个英文字母

    for a in range(ord('a'), ord('z') + 1): print(chr(a) , end="") for a in range(ord('A'), or ...