cocos2dx、cocostudio的一些技术讨论一:触摸吞噬
2014-04-12 17:42
127 查看
最近做的2d项目,用的是cocos2dx和cocostudio,话说cocostudio虽然提高了一些开发效率,但还是有很多缺陷和不好的地方,单说bug就有不少,而且稳定性还有待进一步的提高。不过总体来说,用的还可以,毕竟和unity这个商业化的引擎提供的工具是没法比的。还是说说开发中遇到的一些棘手的问题吧。
1:弹框的触摸问题
相信做手机开发的人对触摸的层叠问题一定都印象深刻吧,这也是个挺头疼的问题。cocos2dx的触摸处理是一层层传递的,而且menu的触摸级别比layer高,这就导致上层的触摸很传递到下层的按钮上,导致面板弹出的混乱。cocostudio的触摸传递不太一样,它所有的单元widget都可相应触摸,级别也都是一样的,等同处理,这就避免了级别的混乱。cocos2dx要处理弹框的触摸问题,处理方法可以是,layer的触摸级别设置的比menu(-128)高(-129)或同级(保证没有其他单元触摸级别比他高),然后再layer
的触摸函数上处理触摸的传递(也就是把无需响应的触摸吞噬到,不再传递到下一层上),如下(lua版本):
local function onTouch(event, x, y)
if event == "began" then
for child in self:getChildren() do
if child:boundingBox():containsPoint(x,y) then
-- 传递触摸
return false
end
end
-- 吞噬触摸
return true
end
end
self:registerScriptTouchHandler(onTouch, false, -129, true)
self:setTouchEnabled(true)
针对cocostudio的实现不同,处理ULLayer的触摸传递有些不同我们只需把我们弹框的背景加上触摸以及加层遮罩(颜色可有可无):
local _bg = UIImageView:create()
_bg:setTexture("image/...")
_bg:setScale9Size(CCSizeMake(display.width, display.height))
_bg:setPosition(ccp(display.width/2, display.height/2))
_bg:setTouchEnable(true)
ui:addWidget(_bg)
local autoRemove = autoRemove or false
if autoRemove then
local function onTouchHandler(event, eventSource)
if event == "began" then
-- 关闭窗口
self:close()
end
end
_bg:addScriptHandler(onTouchHandler)
end
以上是处理的方式 ——_bg一定是UILayer的第一个child,里面的加了一个touchhandler,主要是用来处理tips窗口的,即点击窗口外其他区域关闭此窗口。
1:弹框的触摸问题
相信做手机开发的人对触摸的层叠问题一定都印象深刻吧,这也是个挺头疼的问题。cocos2dx的触摸处理是一层层传递的,而且menu的触摸级别比layer高,这就导致上层的触摸很传递到下层的按钮上,导致面板弹出的混乱。cocostudio的触摸传递不太一样,它所有的单元widget都可相应触摸,级别也都是一样的,等同处理,这就避免了级别的混乱。cocos2dx要处理弹框的触摸问题,处理方法可以是,layer的触摸级别设置的比menu(-128)高(-129)或同级(保证没有其他单元触摸级别比他高),然后再layer
的触摸函数上处理触摸的传递(也就是把无需响应的触摸吞噬到,不再传递到下一层上),如下(lua版本):
local function onTouch(event, x, y)
if event == "began" then
for child in self:getChildren() do
if child:boundingBox():containsPoint(x,y) then
-- 传递触摸
return false
end
end
-- 吞噬触摸
return true
end
end
self:registerScriptTouchHandler(onTouch, false, -129, true)
self:setTouchEnabled(true)
针对cocostudio的实现不同,处理ULLayer的触摸传递有些不同我们只需把我们弹框的背景加上触摸以及加层遮罩(颜色可有可无):
local _bg = UIImageView:create()
_bg:setTexture("image/...")
_bg:setScale9Size(CCSizeMake(display.width, display.height))
_bg:setPosition(ccp(display.width/2, display.height/2))
_bg:setTouchEnable(true)
ui:addWidget(_bg)
local autoRemove = autoRemove or false
if autoRemove then
local function onTouchHandler(event, eventSource)
if event == "began" then
-- 关闭窗口
self:close()
end
end
_bg:addScriptHandler(onTouchHandler)
end
以上是处理的方式 ——_bg一定是UILayer的第一个child,里面的加了一个touchhandler,主要是用来处理tips窗口的,即点击窗口外其他区域关闭此窗口。
相关文章推荐
- 关于UI开发(总结一些技术和一些论坛牛人讨论)
- cocos2dx3.x使用cocostudio触摸事件不响应的奇葩问题
- 转载:.Cocos2dx2.2下使用JNI技术调用jar包里面的一些方法遇到的一些问题及解决方案。
- cocos2dx3.x使用cocostudio触摸事件不响应的奇葩问题
- 关于UI开发(总结一些技术和一些论坛牛人讨论)
- [技术讨论]业务建模的一些问题和工具选择的问题
- 转: 关于UI开发(总结一些技术和一些论坛牛人讨论)
- Spring_MVC+Hibernate的一些小记录(有错误或者不明白的可以大家相互讨论一下,本人刚刚涉足框架技术,谢谢!)
- cocos2dx 触摸吞噬的实现
- 微服务架构的基础框架选择:Spring Cloud还是Dubbo 最近一段时间不论互联网还是传统行业,凡是涉及信息技术范畴的圈子几乎都在讨论微服务架构。近期也看到各大技术社区开始组织一些沙龙和论坛来分
- 一起谈.NET技术,关于CLR内存管理一些深层次的讨论 [上篇]
- 一起谈.NET技术,关于CLR内存管理一些深层次的讨论 [下篇]
- 希望在这里能找到一些好朋友,一起讨论技术来提高自己水平,感谢每一个给自己帮助的朋友,谢谢你们!
- Cocos2dx下使用JNI技术调用jar包里面的一些方法遇到的一些问题及解决方案
- cocos2dx 中触摸事件分发一些解读
- cocos2dx 3.X 触摸吞噬功能
- 建了个成都DOTNET群,希望能够经常组织大家进行一些技术讨论等活动
- cocos2dx 3.X 触摸吞噬功能
- 核心技术笔记_重要的java.lang.string:、 String类中的一些重要的方法(2014.04.16 day36)
- J2EE领域的一些技术框架结构图