Natification:Cocos中的观察者模式

Natification:Cocos中的观察者模式,第1张

概述cocos中的观察者: NotificationCenter:通知中心 NotificationObserver:通知的观察者 代码: class CC_DLL __NotificationCenter : public Ref{ friend class ScriptHandlerMgr;public: /// 构造函数 __NotificationCenter();

cocos中的观察者:

NotificationCenter:通知中心

NotificationObserver:通知的观察者

代码:

class CC_DLL __NotificationCenter : public Ref{    frIEnd class ScriptHandlerMgr;public:	/// 构造函数    __NotificationCenter();	/// 析构函数    ~__NotificationCenter();    	/// 得到单例    static __NotificationCenter *getInstance();	/// 销毁单例    static voID destroyInstance();	/// 添加一个观察者	/// 为指定的目标添加一个观察者	/// target 想要观察通知事件的目标	/// selector 指定的通知时间广播的时候,将被调用的回调函数。	/// name 通知的名字	/// sender(发送者)目标想要接收的通知的对象。只有通知被发送者发送的时候才会传递给目标。nullptr 意味着发送者对于是否传递通知给目标没什么意义。    voID addobserver(Ref *target,SEL_CallFuncO selector,const std::string& name,Ref *sender);	/// 移除观察者	/// 通过指定的目标和名字移除观察者	/// target 通知的目标	/// name 通知的名字    voID removeObserver(Ref *target,const std::string& name);    	/// 移除目标注册的所有的通知	/// target 通知的目标	/// 返回移除的观察者的数量    int removeAllObservers(Ref *target);	/// 为脚本绑定注册一个支持器	/// 现在只支持Lua绑定	/// handler Lua支持器    voID registerScriptObserver(Ref *target,int handler,const std::string& name);	/// 注销脚本观察者    voID unregisterScriptObserver(Ref *target,const std::string& name);    	/// 根据名字广播一个通知	/// name 通知的名字    voID postNotification(const std::string& name);	///  广播一个通知通过名字	/// name 通知的名字	/// sender 发布通知的对象,不能是nullptr    voID postNotification(const std::string& name,Ref *sender);    	/// 得到脚本支持器	/// 现在只支持lua绑定	/// 返回脚本支持器    inline int getScriptHandler() const { return _scriptHandler; };    	/// 得到观察者的脚本支持器	/// name 通知的名字	/// 观察者的脚本支持器    int getobserverHandlerByname(const std::string& name);private:	/// 通过指定的目标和名字检测观察者是否已经推出    bool observerExisted(Ref *target,Ref *sender);};class CC_DLL NotificationObserver : public Ref{public:	/// 构造函数	/// target 想要观察通知事件的目标	/// seletor 当指定的通知事件被广播的时候调用的回调函数	/// name 通知的名字	/// sender 目标想要接收通知的对象。只有被这个发送者发送的通知会传递给目标。nullptr意味着发送者对于目标是否接受通知没有用。    NotificationObserver(Ref *target,Ref *sender);/// 析构函数    ~NotificationObserver();          /// 调用这个观察者的回调函数    voID performSelector(Ref *sender);    };

使用:

思路:一个节点执行一个一直循环的动作,在动作序列结束的时候,回调,发布一条动作执行一遍的信息。

float dis = size.wIDth + light->getContentSize().wIDth;auto moveBy = MoveBy::create(0.8f,Vec2(dis,0));auto place = Place::create(light->getposition());//最后执行的回调函数auto callback = CallFuncN::create(CC_CALLBACK_1(DemoMainLayer::ActionCallback,this));auto seq = Sequence::create(moveBy,HIDe::create(),DelayTime::create(1.0f),place,Show::create(),callback,nullptr);light->runAction(RepeatForever::create(seq));// 添加观察者NotificationCenter::getInstance()->addobserver(this,CC_CALLFUNCO_SELECTOR(DemoMainLayer::observerCallback),MSG_ACTION_CALLBACK,this);

//动作的回调函数:

voID DemoMainLayer::ActionCallback(cocos2d::Node * pNode){	// 广播信息	NotificationCenter::getInstance()->postNotification(MSG_ACTION_CALLBACK,this);}

观察者的回调函数:

voID DemoMainLayer::observerCallback(cocos2d::Ref * pObj){	log("Action_calll");}
总结

以上是内存溢出为你收集整理的Natification:Cocos中的观察者模式全部内容,希望文章能够帮你解决Natification:Cocos中的观察者模式所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1070266.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存