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