关于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类来管理

原文地址:https://www.cnblogs.com/HangZhe/p/5701019.html