今天看了一篇文章,学习了cocos2d-x下的观察者模式,觉得受益匪浅,观察者模式就是发送一个消息,让观察者执行某个动作,可用于数据传递,以可以用于消息传递

1.在同个层里面的观察者模式,用HelloWorld做为示例:

在HelloWorld.h里面需要写HelloWorld的虚构函数,用于观察者的释放内存,因为观察者相当于一个单例,再写一个回调函数,处理观察者做的事情

HelloWorld.h

void ObserverFunction(Ref * ref);

~HelloWorld();

在HelloWorld.cpp的init()方法中写上

NotificationCenter::getInstance()->addObserver(this, CC_CALLFUNCO_SELECTOR(HelloWorld::ObserverFunction), "message", NULL);

添加观察者,参数1为事件监听的目标,参数2为回调函数(即接收到消息后执行的函数),参数3为消息名,参数4为消息体。

在HelloWorld::~HelloWorld()方法中写上

NotificationCenter::getInstance()->removeObserver(this, "message");

在menuButton按钮的回调函数写上

NotificationCenter::getInstance()->postNotification("message", NULL);

发送消息,让观察者知道,调用ObserverFunction函数。

假如

void HelloWorld::ObserverFunction(Ref *ref)

{

log("You Click menuButton");

}

点击按钮会有如下效果:

2.在不同层里面的观察者模式,用SecondLayer做为示例:

在SecondLayer.h里面需要写SecondLayer的虚构函数,用于观察者的释放内存,因为观察者相当于一个单例,再写一个回调函数,处理观察者做的事情

SecondLayer.h

void ObserverFunction(Ref * ref);

~SecondLayer();

在SecondLayer.cpp的init()方法中写上

NotificationCenter::getInstance()->addObserver(this, CC_CALLFUNCO_SELECTOR(SecondLayer::ObserverFunction), "message", NULL);

添加观察者,参数1为事件监听的目标,参数2为回调函数(即接收到消息后执行的函数),参数3为消息名,参数4为消息体。

在SecondLayer::~ SecondLayer()方法中写上

NotificationCenter::getInstance()->removeObserver(this, "message");

在HelloWorld在menuButton按钮的回调函数写上

int num=CCRANDOM_0_1()*1000;//0-1000的随机数

NotificationCenter::getInstance()->postNotification("message",(Ref*)new __Integer(num));//向观察者传递数据

发送消息,让观察者知道,调用ObserverFunction函数,其中int转换成Ref可以(Ref*)new __Integer(num)写。

假如

void HelloWorld::ObserverFunction(Ref *ref)

{

log("SecondLayer Receive num=%d", dynamic_cast<__Integer*>(num)->getValue());

}

Ref转换成int:

dynamic_cast<__Integer*>(num)->getValue()

点击按钮会有如下效果:

小江cocos2d-x 3.3游戏学习之旅之观察者模式相关推荐

  1. Unity从头开始开发增强现实(AR)游戏学习教程

    使用Unity 2021构建增强现实飞镖游戏 学习从头开始开发增强现实(AR)游戏,使用AR基金会,货币化,发布游戏玩商店 Build a Augmented Reality Dartboard Ga ...

  2. UE4创建第一人称射击游戏学习教程

    Unreal Engine 4: Create Your Own First-Person Shooter MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言 ...

  3. Unity优化手机游戏学习教程

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:3.69 GB |时长:6h 44m 创 ...

  4. Unity创造没有代码的游戏学习教程

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小:17.4 GB |时长:17h 18m 你会学 ...

  5. UE4创建第一人称射击游戏学习教程 Unreal Engine 4: Create Your Own First-Person Shooter

    UE4创建第一人称射击游戏学习教程 本课程包含38节视频课,将逐步指导您完成以下主题: 云桥网络 平台获取课程! 如何创建6种可定制的武器(包括手枪.突击步枪.猎枪.狙击枪.榴弹发射器和火箭发射器) ...

  6. 我的游戏学习日志46——游戏交互设计(2)

    我的游戏学习日志46--游戏交互设计(2) 2.游戏界面设计 游戏界面在保持一致性.可读性.效率性等普适原则的基础上,还应该特殊关照玩家的沉浸体验. 首要原则是保证游戏的顺畅使用. (1)提高自然性和 ...

  7. 2048java课程设计报告_软件工程——Java版2048游戏学习报告

    2048游戏学习报告 姓名:王浩 专业:计算机科学与技术 年级:15级4班 学号:201510411420 目录 一. 前言                                       ...

  8. 我的游戏学习日志17——游戏元素的解析(1)

    我的游戏学习日志17--游戏元素的解析(1) 1.沉浸元素 定义:在一般的定义上指通过物理方式和想象进入一个与通常环境不同的场景.(也被也称"置入"和"临场") ...

  9. 我的游戏学习日志3——三国志GBA

    我的游戏学习日志3--三国志GBA 三国志GBA由日本光荣公司1991~1995所推出<三国志>系列游戏,该作是光荣在GBA上推出的<三国志>系列作品的第一款.本游戏登场武将总 ...

最新文章

  1. 在网络通讯中,如何自己分配可用的端口号和获取自己的ip地址
  2. 开发者必备的15 个Web开发工具
  3. 电脑技巧:微软电脑管家测试版发布,赶快来体验一下吧!
  4. iPhone和Android的区别,从警示框看iPhone与Android的区别
  5. java多条件不定条件查询
  6. 寒武纪官宣25亿美元估值融资,也有AI芯片公司要被收购了
  7. 网络安全以及常见的网络攻击
  8. OpenCore引导配置说明第十四版-基于OpenCore-0.6.7
  9. spotfire中文使用教程含演示数据以及二次开发思路整理
  10. centos 发送匿名邮件
  11. w ndows10输入法设置,Win10输入法设置技巧:切换输入法
  12. 看这个就够了,谷歌翻译Google 退出中国后如何恢复网页翻译?
  13. HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。
  14. php fetch_assoc,PHP使用fetch_assoc()获取查询结果时数据类型都变了
  15. 图书管理系统设计类图
  16. ablation experiments
  17. 算法度量方法——时间复杂度及空间复杂度
  18. 从零开始学python的第16天
  19. Mybatis关系映射一对一的关系
  20. (萌新的数电学习)用VHDL语言设计4位行波进位加法器

热门文章

  1. python 计算某段时间每日对数收益率,并设计一种指标进行交易,分析年化收益和夏普比率
  2. SpringBoot(四) Web开发(2)Restful风格的CRUD操作
  3. RHEL5下构建LAMP+Postfix+Dovecot+SquirrelMail+Extmail+Extman+DRBD
  4. 陆奇博士演讲+现场创业快问快答,杭州、苏州、上海、深圳、武汉
  5. python 单选按钮_Radiobutton
  6. 计算机学校招生演讲稿,职业学校招生演讲稿3篇
  7. TL-WR740N设置WDS无线桥接模式
  8. 洛谷 P1226 【模板】快速幂||取余运算
  9. 华为FreeBuds Pro 2戴久了耳朵会痛,缓解小tips~
  10. Unknown command: crawl