cocos2dx增加front层并优先响应listener
2017-01-11 09:14
316 查看
需求
在游戏中会有一些提示性的消息需要显示在UI的最上层,即使是在scene切换的时候也不能消失掉。比如当服务器推送某个消息的时候,需求一个弹窗来展示,但这个时候游戏刚好进行了
scene切换,就会导致添加在上一个
scene的弹窗消失掉,导致该提示消息无法展示。
解决方法
我们可以为看到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)
相关文章推荐
- EditText TextView 直接绑定OnClickListener后要点两次响应的解决办法
- 自定义带单选框的SimpleCursorAdapter(ListView中增加CheckBox的OnClick响应)
- 内容页响应母版页控件的事件(内容页共享母版页的某个控件事件)(用户控件增加一个委托)
- 自定义ListView不能响应setOnClickListener的onItemClick事件解决办法
- [cocos2dx笔记003] Vs2013增加静态库工程
- 无法响应ListView的onItemClickListener中的onItemClick()方法
- 把quick-3.5的UIWebview移植到quick-cocos2dx2.2.6 详解 quick cocos2dx 2.2.6增加WebView库 实现lua和webview交互
- ListView同时响应itemclick事件和item控件的onClickListener时间的解决办法
- radiobutton 的OnClickListener和OnCheckedChangeListener的响应事件分析
- setOnKeyListener响应两次问题
- Tomcat启动时加载数据到缓存--Web.xml里listener的加载顺序,优先初始化Spring IOC容器
- 增加客户端回车按钮响应功能
- 使用Extjs组件实现Top-Left-Main布局并且增加事件响应
- 自定义带单选框的SimpleCursorAdapter(ListView中增加CheckBox的OnClick响应)
- cocos2dx多个按钮同时响应点击事件
- Android中自定义ListView无法响应OnItemClickListener中的onItemClick方法问题解决方案
- 在MapView中增加Point,并可以响应点击事件
- android 自定义listview无法响应点击事件OnItemClickListener
- android gridview setOnItemClickListener没有响应
- 在CDHTMLDialog中扩展浏览器脚本以及在HTML中增加MFC消息响应