【cocos2dx-3.0beta-制作flappybird】——游戏控制层的设计以及控制层和游戏层的关系

华恩
2023-12-01

一、引言

正如上文所述,游戏场景当中,有一层被称为控制层。顾名思义,该层主要是响应玩家的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


 类似资料: