cocos实现触摸屏幕关掉界面
来源:互联网 发布:编程培训加盟 编辑:程序博客网 时间:2024/05/29 03:04
最近要求人物信息界面不通过点击按钮关闭,而是点击屏幕任意位置关闭。
实现方法就是给界面添加触摸事件。
要是想实现点击所有位置都关掉界面,可以在界面的最上层盖上一层layer来响应事件。
要是想实现点击对话框以外的部分来关掉界面,可以在对话框的下面添加一层layer来响应,再让对话框的控件吞噬掉触摸,对话框本身就不会响应事件了。例子如下:
void XXX::createUI(){ //最底层的一层layer,用于响应触摸事件 m_pTouchLayer = dynamic_cast<Layout*>(shareLoader->getChildByName("Panel_3")); //创建一个点击事件 m_pTouchListener = EventListenerTouchOneByOne::create(); m_pTouchListener->setSwallowTouches(false);//阻止触摸向下传递 m_pTouchListener->onTouchBegan = [&](Touch* touch, Event* event) { return true; }; m_pTouchListener->onTouchEnded = CC_CALLBACK_2(MJUserHeadUI::onTouchEnded, this); //给layer绑定事件 _eventDispatcher->addEventListenerWithSceneGraphPriority(m_pTouchListener, m_pTouchLayer);}///////////////////////////////////////void XXXXX::onTouchEnded(Touch* touch, Event *event){ this->removeFromParent();}
代码很简单,但是写的时候却因为不动脑子,耽误了点时间。
因为之前写聊天界面的时候,也是通过触摸事件来,点击聊天按钮界面弹出,点击空白屏幕界面消失。那个时候,逻辑是直接写在onTouchBegan 里面的,如下:
m_pTouchListener->onTouchBegan = [&](Touch* touch, Event* event) { if (this->isShowing() == true) { this->hideUI(); } return true; };
然后。。。在写这个的时候,却不是setvisible的方式,而是removeFromParent的方式,直接写在onTouchBegan 里面就会有问题。
//class CC_DLL EventListenerTouchOneByOne : public EventListenertypedef std::function<bool(Touch*, Event*)> ccTouchBeganCallback;typedef std::function<void(Touch*, Event*)> ccTouchCallback;ccTouchBeganCallback onTouchBegan;ccTouchCallback onTouchMoved;ccTouchCallback onTouchEnded;ccTouchCallback onTouchCancelled;
看源代码,began是有返回值的,会根据返回的true和false来进行下面的逻辑。在返回之前就removeFromParent,会造成layer的触摸吞噬失效,在表现上就是,关闭界面的同时,会触发下面一层的按钮事件。但是,具体在cocos哪个地方造成这个现象,我就没花时间跟进了。因为这个地方,不管怎么写触摸和吞噬都能触发下面layer的控件,我还以为是绑定触摸事件这步有问题,跟了很久代码。。。所以,把removeFromParent写在onTouchEnded里面就好了。
写代码的时候真的要走点心,我虽然只是个拼UI的,也希望是拼得最快最美最熟练的。。。
阅读全文
0 0
- cocos实现触摸屏幕关掉界面
- cocos 触摸双击事件的实现
- cocos触摸
- ThinkPad 关掉触摸板
- Centos 关掉屏幕保护
- cocos游戏开发-用户触摸功能的实现
- 触摸屏幕实现拖尾效果
- 实现一个触摸屏幕上可拖拽的正方形
- cocos 触摸机制
- COCOS-单点触摸
- COCOS-多点触摸
- Cocos单点触摸
- cocos::触摸跟随移动
- cocos 动画 触摸事件
- cocos-js触摸事件
- 触摸屏幕
- 屏幕触摸
- ★关掉屏幕使用HDMI
- 推荐一个免费精确的号码归属地查询接口
- Oracle随机抽取数据
- 【Python】numpy中tile函数的使用
- Java与Oracle日期格式化
- 7.dubbo线程模型
- cocos实现触摸屏幕关掉界面
- unity 批量修改预制体
- java获取cpu数量
- boost 定时器 demo
- 博客第三篇
- .Net文档图像处理工具包GdPicture.NET发布v14.0.29,改进OCR功能
- 数据结构课设之家谱管理系统
- Oracle学习4:distinct、between and、in、like详解
- Spring Boot 整合ActiveMQ的过程