關於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類來管理


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM