cocos2dx3.3开发FlappyBird总结十一:控制层功能设计

简介:

控制层的任务就是监听触摸事件,然后回调代理方法。控制层并不具体处理任务事情,只是抛给代理处理,因此需要先设计一个代理。

代理只是一个方法,那就是触摸:

/**
 * The delegate between option layer and game layer
 */
class OptionDelegate {
public:
  /**
   * When touch the option layer, it will be called
   */
  virtual void onTouch() = 0;
};

代理类被声明为纯虚函数,这样自己是不能实现的,且遵守此代理的类,必须要实现此代理中的方法。

下面说说控制层:


class OptionDelegate;

/**
 * The game background,showing the background information
 * in the game.
 */
class OptionLayer : public cocos2d::Layer {
public:
  /**
   * The default constructor
   */
  OptionLayer();

  /**
   * The default destructor
   */
  ~OptionLayer();

  /**
   * The init method, will init the super init method first
   *
   * @return true if succeeded, otherwise false
   */
  virtual bool init();

  CREATE_FUNC(OptionLayer);

  /**
   * Override the multitouch method
   */
  virtual void onTouchesBegan(const std::vector<cocos2d::Touch*>& touches,
                              cocos2d::Event *unused_event);

  /**
   * The delegate 
   */
  CC_SYNTHESIZE(OptionDelegate*, _optionDelegate, OptionDelegate);
};

看到CC_SYNTHESIZE(OptionDelegate*, _optionDelegate, OptionDelegate);这行了吗,这是设置代理,如果阅读不懂什么是代理,那先去找相关文章阅读。如果读者做过IOS开发,那么一定很熟悉,因为那是最常用的通信机制。

简单来说,这里控制层监听触摸事件,然后控制层就告诉代理,我监听到触摸事件了,那么代理实现对应的方法,就可以了。

在初始化时,让控制层添加监听事件:


bool OptionLayer::init() {
  if (!Layer::init()) {
    return false;
  }

  // Register touches began event
  auto listener = EventListenerTouchAllAtOnce::create();
  listener->onTouchesBegan = CC_CALLBACK_2(OptionLayer::onTouchesBegan, this);

//  // 这个是3.0后的新特性,这里就没有使用,主要还是想先了解旧方式,但新的方式也是需要知道的
//  listener->onTouchesBegan = [&](const std::vector<Touch *> &touches, Event *event) {
//    CCLOG("touches begin");
//    if (this->getOptionDelegate()) {
//      this->getOptionDelegate()->onTouch();
//    }
//  };
  auto dispatcher = Director::getInstance()->getEventDispatcher();
  dispatcher->addEventListenerWithSceneGraphPriority(listener, this);

  return true;
}

好了,下一步该说说状态层了

目录
相关文章
|
2月前
|
存储 C++ UED
【实战指南】4步实现C++插件化编程,轻松实现功能定制与扩展
本文介绍了如何通过四步实现C++插件化编程,实现功能定制与扩展。主要内容包括引言、概述、需求分析、设计方案、详细设计、验证和总结。通过动态加载功能模块,实现软件的高度灵活性和可扩展性,支持快速定制和市场变化响应。具体步骤涉及配置文件构建、模块编译、动态库入口实现和主程序加载。验证部分展示了模块加载成功的日志和配置信息。总结中强调了插件化编程的优势及其在多个方面的应用。
312 63
|
Java 定位技术 图形学
Unity客户端开发优化要点
Unity客户端开发优化要点
|
存储 前端开发 JavaScript
潮玩元宇宙大逃杀app游戏系统开发稳定版/流程设计/功能步骤/需求逻辑/源码程序
需求分析:明确项目的整体目标和功能需求,包括游戏规则、玩法机制、图形界面、用户账号系统、实时交互等。
|
运维 前端开发 Python
brython | 笨办法写个连连看-1.核心功能实现
brython | 笨办法写个连连看-1.核心功能实现
130 1
|
C# 图形学
Unity之C#高级开发①
Unity之C#高级开发①
Unity之C#高级开发①
|
C# 图形学
Unity之C#高级开发②
Unity之C#高级开发②
Unity之C#高级开发②
|
程序员 Scala 开发者
项目需求和程序框架图 | 学习笔记
快速学习项目需求和程序框架图
项目需求和程序框架图 | 学习笔记
|
JavaScript 前端开发 小程序
HaaS UI小程序解决方案基础教学之二: 搭建第一个UI页面
AliOS Things: 阿里云智能IoT团队自研的物联网操作系统,目前已获得国家 HaaS:全称是Hardware as a Service,阿里云智能IoT团队基于AliOS Things系统推出的硬件即服务 HaaS UI:全称是Hardware as a Service User Interface,是源自AliOS Things操作系统上的一套应用&图形解决方案,支持C/C++和 JS两种开发语言
HaaS UI小程序解决方案基础教学之二: 搭建第一个UI页面