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

  • 相关阅读:
    windbg 内核模式调试用户进程
    深发展银行编码器(解剖)
    SIM300常用命令
    tdi驱动 for vista or later
    vm命令行控制 (vmrun)
    WMI事件监控
    Visual C++ 中 #pragma 指示符的使用
    IOCP开发的几个概念
    移动web.config文件时造成的错误,
    提高网站速度|页面优化
  • 原文地址:https://www.cnblogs.com/HangZhe/p/5701019.html
Copyright © 2020-2023  润新知