cocos quick lua 输入框点击穿透的问题处理方案。
来源:互联网 发布:日本人相互的称呼知乎 编辑:程序博客网 时间:2024/05/14 20:59
cocos quick lua 输入框点击穿透的问题处理方案。
条件:当前版本quick-3.3 -lua,系统 win7。
问题:在输入框(textField或者editbox,下文“输入框”就代表这两种)打开的情况下弹出其他界面盖住输入框,点击上层界面的时候输入框还会优先响应点击事件,而上层的界面上的其他控件不会响应点击事件。
原因分析:界面上的点击事件使我们自己定义的touch事件,而输入框点击事件是在cpp层quick接受处理的,所以导致我们拦截点击事件也不好处理。
处理方案一:更改Cpp层做成统一的事件监听可以按照层级来顺序监听。
处理方案二:脚本层处理,重新封装UIInput对象使得满足事件监听顺序。
由于老大不让我改引擎代码,让我想办法脚本层处理这个问题。于是我从方案2入手的。
已知输入框是可以通过setTouchEnabled函数屏蔽点击事件的,
于是思路如下,UIInput本来返回一个输入框类型的对象,要满足点击顺序必须使用与lua层点击事件一样的事件处理。因此我需要返回一个可以重写touch事件的界面就Node吧,
先对输入框setTouchEnabled函数上锁,然后通过touch事件来处理来决定是否向下传递点击事件,这个时候需要一个输入框点击函数touchDownAction,往下传递点击事件,传递完毕立即加锁。
点击事件代码如下:
local oTouchNode = display.newNode()
oTouchNode:setContentSize(oSize)
editbox:addTo(oTouchNode)
editbox:setTouchEnabled(false) –输入框加锁
oTouchNode:setTouchEnabled(true)
oTouchNode.editBox = editbox–本来是要返回editbox对象的,现在返回的是oTouchNode
oTouchNode:addNodeEventListener(cc.NODE_TOUCH_EVENT, function(event)
if “ended” == event.name then
–这里可以建判断点击事件是否还在控件中
editbox:setTouchEnabled(true) –解锁
editbox:touchDownAction(editbox, 2)–传递事件
editbox:setTouchEnabled(false) –加锁
end
return true
end)
return oTouchNode
**这样会导致一个小问题是我们不能直接访问editbox的方法,为了兼容其他已经写到的地方我们可以把editbox的函数重定向到Node上
当然要搜一下 用到了哪些都加上才行。
就这么多吧,测试可行。第一种方案需引擎优化吧。
- cocos quick lua 输入框点击穿透的问题处理方案。
- cocos-lua输入框
- 【Cocos-Quick】quick源文件中关于lua的import和require的区别
- android 透明布局点击穿透的处理
- cocos输入框崩溃问题
- cocos-quick-lua 学习笔记--定时器:scheduler
- quick-cocos 3.5 lua banding c++
- cocos lua遇到的一些问题
- cocos2d-x lua点击穿透不是层的区域
- 解决布局点击事件穿透的问题
- 解决布局点击事件穿透的问题
- 解决点击事件穿透的问题
- quick-lua中表的排序问题
- cocos-lua问题记录
- cocos lua 问题总结
- Cocos IDE 创建 quick cocos 的工程
- 用Cocos Quick+Lua写的射击游戏——月球战士(MoonWarriors)附源码
- 关于fragment点击穿透处理
- AngularJs自定义指令
- Spring系列之Spring常用注解总结
- 面试题之:数据库自增列到顶了怎么办
- 三星笔记本 重装系统
- Notepad++英文版背景色设置
- cocos quick lua 输入框点击穿透的问题处理方案。
- Js的语法特性
- 分享一波怎么利用github挂载自己的代码
- QT + TSC条码打印机 打印相应的产品条码标签
- Python爬虫笔记之模拟登录
- 1.Maven pom.xml 配置详解
- [编程题]计算糖果
- c++初级 之 运算符重载
- 第5章 排序 —— 5.1 插入排序