zoukankan      html  css  js  c++  java
  • Cocos2d-x游戏开发中的消息机制:CCNotificationCenter的使用

    在HTML5游戏开发中,js可以使用Event对象的addEventListener(添加事件监听)、dispatchEvent(触发事件)实现监听机制,如果在coocos2d-x中,去实现这种机制该怎么办?

     
    根据之前PureMVC(JS版)的经验,其中经典的观察者模式可以让我们引用到cocos2d-x中。我们可以尝试着把PureMVC(C++版)中的Notification(我称之为消息机制)引用进来,能让我们很轻易在Cocos2d-x开发的游戏中地实现监听。
     
    其实Cocos2d-x在设计中,本身有用到观察者模式(Observer Model)。使用CCNotificationCenter可以满足我们的需求。
     
    实现步骤:
    1、发送消息:
    在需要发送消息的地方,调用postNotification方法即可,postNotification有两种,可以不带数据和带数据。
    void postNotification(const char* name);
    void postNotification(const char* name,CCObject* data);

    name是消息名,是消息唯一标识,在整个游戏过程中是唯一的,因此,我们一般把所有的消息名放在一个头文件中,纺织消息名重复,data是消息体,即发送的数据。

    发送通知如下:

    CCNotificationCenter::sharedNotificationCenter()->postNotification(name);

    2、接受消息:

    在任何地方,只要你你对某个消息感兴趣(和pureMVC中的listNotification一样),你就可以在那里监听该消息。添加消息监听是在onEnter()里面的:

    void addObserver(CCObject* target,SEL_CallFuncO callBack,const char* name, CCObject* data);

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

    具体实现如下:

    void GameLayer::onEnter(){
        CCLayer::onEnter();
        CCNotificationCenter::sharedNotificationCenter()->addObserver(this,
    callfunco_selector(GameLayer::callBack),
    name,
    NULL }

    3、释放消息观察者:

    释放消息观察者是很重要的,不释放的话,会产生内存泄露。我们需要在onExit()方法里面,释放消息观察者。

    void GameLayer::onExit(){
         CCLayer::onExit();
         CCNotificationCenter::sharedNotificationCenter()->removeObserver(
    this,
    name //消息名 ) }

     

  • 相关阅读:
    选择排序
    插入排序
    洗牌算法
    访问性模式
    策略模式
    mysql EXPLAIN Join Types 手册解释 及数据实操
    Nginx Location和Rewrite总结
    json_decode 解析带BOM头文件错误
    laravel 集成 swagger插件
    php S3
  • 原文地址:https://www.cnblogs.com/iRavior/p/3348130.html
Copyright © 2011-2022 走看看