在整個(gè)游戲開始之前,我們先看一下HelloWorld示例中CCScene和CCLayer之間的關(guān)系是怎么處理的。
//HelloWorldScene.h
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include "cocos2d.h"
class HelloWorld : public cocos2d::CCLayer
{
public:
virtual bool init();
static cocos2d::CCScene* scene();//通過此函數(shù)獲取場(chǎng)景指針
LAYER_CREATE_FUNC(HelloWorld);
};
#endif // __HELLOWORLD_SCENE_H__
//HelloWorldScene.cpp
#include "HelloWorldScene.h"
USING_NS_CC;
CCScene* HelloWorld::scene()
{
CCScene *scene = CCScene::create();//創(chuàng)建并返回場(chǎng)景指針
HelloWorld *layer = HelloWorld::create();
scene->addChild(layer);
return scene;
}
bool HelloWorld::init()
{
if ( !CCLayer::init() )
{
return false;
}
return true;
}
cocos2d-x的示例中采用的是創(chuàng)建一個(gè)繼承于CCLayer的HelloWorldScene,然后通過HelloWorldScene這個(gè)Layer中提供一個(gè)產(chǎn)生CCScene的指針的靜態(tài)函數(shù),獲取場(chǎng)景的指針,載入場(chǎng)景。
但是我們這里并不打算這么做,通過一個(gè)CCLayer的子類來獲取CCScene的指針,這樣用起來很奇怪,所以,我把CCScene和CCLayer嚴(yán)格的分開來使用。
1.創(chuàng)建GameScene類繼承于CCScene。
2.創(chuàng)建GameLayer類繼承于CCLayer。
*3.為GameScene添加成員變量 GameLayer _gameLayer。**
4.在GameScene的init里把_gameLayer add到場(chǎng)景中。
這樣就能把GameScene和GameLayer結(jié)合起來,同時(shí)又分工獨(dú)立。在后面的其他場(chǎng)景也是這樣進(jìn)行處理的。GameScene的結(jié)構(gòu)如下。
//GameScene.h
#pragma once
#include "cocos2d.h"
#include "GameLayer.h"
USING_NS_CC;
class GameScene :
public CCScene
{
public:
GameScene(void);
~GameScene(void);
SCENE_CREATE_FUNC(GameScene);
virtual bool init();
GameLayer* _gameLayer;//把GameLayer暴露給GameScene
};
//GameScene.cpp
#include "GameScene.h"
GameScene::GameScene(void)
{
_gameLayer=NULL;
}
GameScene::~GameScene(void)
{
}
bool GameScene::init()
{
bool bRet=false;
do
{
CC_BREAK_IF(!CCScene::init());
_gameLayer=GameLayer::create();//在這里獲取GameLayer實(shí)例
CC_BREAK_IF(!_gameLayer);
this->addChild(_gameLayer);//add _gameLayer到場(chǎng)景中
bRet=true;
} while (0);
return bRet;
}
而GameLayer就不再產(chǎn)生場(chǎng)景指針了。導(dǎo)演類直接從GameScene中獲取場(chǎng)景指針。GameLayer其余部分的結(jié)構(gòu)和HelloWorldScene就一致了。要注意的是,GameLayer會(huì)是整個(gè)游戲的容器,它上面放置了飛機(jī)層,子彈層,UFO層,控制層等等,是整個(gè)游戲的基層,另外還包含了一些額外的屬性,比如游戲難度等等,這些在后面都會(huì)介紹到。
//AppDelegate.cpp
CCScene *pScene = GameScene::create();
pDirector->runWithScene(pScene);
更多建議: