天天看點

【cocos2dx-3.0beta-制作flappybird】——遊戲控制層的設計以及控制層和遊戲層的關系

一、引言

正如上文所述,遊戲場景當中,有一層被稱為控制層。顧名思義,該層主要是響應玩家的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

繼續閱讀