cocos2dx增加front层并优先响应listener

cocos2dx增加front层并优先响应listener,第1张

概述需求 在游戏中会有一些提示性的消息需要显示在UI的最上层,即使是在scene切换的时候也不能消失掉。比如当服务器推送某个消息的时候,需求一个d窗来展示,但这个时候游戏刚好进行了scene切换,就会导致添加在上一个scene的d窗消失掉,导致该提示消息无法展示。 解决方法 我们可以为看到cocos2dx中的调试时候的帧率就是一直显示,哪怕切换场景。这里也使用与之相同的方法。 显示 修改Directo 需求

在游戏中会有一些提示性的消息需要显示在UI的最上层,即使是在scene切换的时候也不能消失掉。比如当服务器推送某个消息的时候,需求一个d窗来展示,但这个时候游戏刚好进行了scene切换,就会导致添加在上一个scene的d窗消失掉,导致该提示消息无法展示。

解决方法

我们可以为看到cocos2dx中的调试时候的帧率就是一直显示,哪怕切换场景。这里也使用与之相同的方法。

显示 修改Director使之包含一个超前层节点,并提供接口访问
Node* getFrontNode(){    return m_fronNode;}Node* m_fronNode;

在CCDirector.h中增加上面的代码,然后在CCDirector.cpp中增加下面的代码

Director::init中增加下面的代码
m_fronNode = Node::create();m_fronNode->retain();m_fronNode->onEnter();
Director::~Director中增加下面的代码
CC_SAFE_RELEASE(m_fronNode);
Director::drawScene函数的showStats下面增加
if (_displayStats){    showStats();}const Mat4& IDentity = Mat4::IDENTITY;m_fronNode->visit(_renderer,IDentity,0);

这样就可以让添加在m_frontNode上面的子节点可以被显示了,但是只是显示显然是不够的,因为我们的提示信息还需要能够点击且响应事件必须也是在最前面,因此还需要在Listener排序的时候确保m_frontNode子节点上的Listener被排序在前面。

点击事件响应

对于SceneGraPHPriority的事件,在CCEventdispatcher.cpp的
Eventdispatcher::sortEventListenersOfSceneGraPHPriority函数中添加下面的代码

visitTarget(rootNode,true); visitTarget(Director::getInstance()->getFrontNode(),true); //新增

通过以上修改之后,当需要添加全局通知的时候,就可以通过下面的代码将通知UI添加上去了,并且保证node的Listener优先响应。

Director::getInstance()->getFrontNode()->addChild(node)
总结

以上是内存溢出为你收集整理的cocos2dx增加front层并优先响应listener全部内容,希望文章能够帮你解决cocos2dx增加front层并优先响应listener所遇到的程序开发问题。

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

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

原文地址:https://54852.com/web/1082783.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存