前两天有个刚学习使用cocos2d-js的同事问我,怎么实现一个功能:点击一个按钮UI显示计数加1,按住不放UI计数就不停的加。 这个功能不就是个长按事件吗?我给他描述了下实现长按事件的思路:
1. 在控件touchBegan时,使用 一次性定时器scheduleOnce传入touchLong函数,设定1秒后执行。
2. touchLong触发时,开启schedule传入addOnce函数(ui显示计数加1),设定每0.1秒执行一次。
3. 在touchEnded时执行unschedule函数,关闭所有定时器函数。防止长按时间不足时误触发了touchLong事件。
4. touchEnded 同时再执行一次addOnce函数(ui显示计数加1),实现按钮点击时功能。
我提供的思路帮同事把问题解决了,但看看他的客户端代码一点都不漂亮,太多游戏逻辑以外的东西。由此原因我决定让sz.UILoader也同时支持touchLong事件,同时也增加了一些新的功能。
不了解sz.UILoader的请看《cocos2d-js实现自动绑定cocostudioUI控件与事件》
一.TouchLong事件
1.事件命名:与其它标准触摸事件一样使用:前缀 + 控件名 + TouchLong TouchLong事件默认触发时间为1秒,你可以修改sz.UILoader.DEFAULT_TOUCH_LONG_TIME来设置默认触发时间。
2.你也可以通过uiloader的TouchBegan事件返回一个大于0小于5的数字做为TouchLong的触发时间。
3.TouchLong可以任意使用,不实现TouchBeang\TouchEnded也不影响。
4.TouchLong也可以配合TouchEvent下使用 (TouchEvent为cocos2d标准事件响应函数以type区分是touchBegan/touchMoved/touchEnded,TouchLong不会出现在其中,需要单独定义函数。)
二.绑定手动创建的ccui控件
1.sz.uiloader.widgetFromJsonFile(target,jsonFile)函数同时可以绑定target上的按命名约定的ccui控件。
2.ccui控件需要提前创建并设置名字,addChild到target上。
3.sz.uiloader.widgetFromJsonFile(target) 无需要json文件参数也能使用。
源码地址github: https://github.com/ShawnZhang2015/UILoader
2. touchLong触发时,开启schedule传入addOnce函数(ui显示计数加1),设定每0.1秒执行一次。
3. 在touchEnded时执行unschedule函数,关闭所有定时器函数。防止长按时间不足时误触发了touchLong事件。
4. touchEnded 同时再执行一次addOnce函数(ui显示计数加1),实现按钮点击时功能。
我提供的思路帮同事把问题解决了,但看看他的客户端代码一点都不漂亮,太多游戏逻辑以外的东西。由此原因我决定让sz.UILoader也同时支持touchLong事件,同时也增加了一些新的功能。
不了解sz.UILoader的请看《cocos2d-js实现自动绑定cocostudioUI控件与事件》
一.TouchLong事件
1.事件命名:与其它标准触摸事件一样使用:前缀 + 控件名 + TouchLong TouchLong事件默认触发时间为1秒,你可以修改sz.UILoader.DEFAULT_TOUCH_LONG_TIME来设置默认触发时间。
2.你也可以通过uiloader的TouchBegan事件返回一个大于0小于5的数字做为TouchLong的触发时间。
3.TouchLong可以任意使用,不实现TouchBeang\TouchEnded也不影响。
4.TouchLong也可以配合TouchEvent下使用 (TouchEvent为cocos2d标准事件响应函数以type区分是touchBegan/touchMoved/touchEnded,TouchLong不会出现在其中,需要单独定义函数。)
二.绑定手动创建的ccui控件
1.sz.uiloader.widgetFromJsonFile(target,jsonFile)函数同时可以绑定target上的按命名约定的ccui控件。
2.ccui控件需要提前创建并设置名字,addChild到target上。
3.sz.uiloader.widgetFromJsonFile(target) 无需要json文件参数也能使用。
源码地址github: https://github.com/ShawnZhang2015/UILoader