【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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值