一、引言
正如上文所述,遊戲場景當中,有一層被稱為控制層。顧名思義,該層主要是響應玩家的OnTouch時間,以實作遊戲當中控制小鳥飛行軌迹的目的。
二、控制層
在遊戲主場景當中,我們通過如下代碼添加控制層
// Add operation layer to control the game
auto optionLayer = OptionLayer::create();
if(optionLayer) {
optionLayer->setDelegator(gameLayer);
this->addChild(optionLayer);
}
在OptionLayer 層中,我們實作了對觸摸事件的監聽:
bool OptionLayer::init()
{
if(Layer::init()){
auto dispatcher = Director::getInstance()->getEventDispatcher();
auto listener = EventListenerTouchAllAtOnce::create();
listener->onTouchesBegan = CC_CALLBACK_2(OptionLayer::onTouchesBegan, this);
dispatcher->addEventListenerWithSceneGraphPriority(listener, this);
return true;
}else {
return false;
}
}
三、遊戲層跟控制層的關系
事實上,遊戲層跟控制層是不直接打交道的,而是通過代理來進行通信。如此一來,就可以把遊戲層和控制層就可以互相獨立出來了。
那麼這又是怎麼實作的呢?
且看如下代碼:
class GameLayer : public Layer , public OptionDelegate{
...
}
遊戲層繼承了 OptionDelegate 類, 而與之對應的,在OptionLayer中,我們定義了該類:
class OptionDelegate
{
public:
virtual void onTouch() = 0;
};
并且,在該類中,我們實作了其對應的方法。
于是不難了解,在GameLayer 和 OptionLayer 之間,通過OptionDelegate這座橋梁實作了兩者的分離和通信。
四、小結
在這一節中,我們簡單分析了遊戲層和控制層之間的關系,有關詳細代碼,還請移步到github: https://github.com/OiteBoys/Earlybird