cocos2d-x之CCGUI设计与实现(3)循环列表框的实现(数字选择器)
2013-05-10 12:23
393 查看
真心不好意思,为了防止CSDN把我的彩色“恒”弄成灰白的,每月预先会标记几篇博客充数哈哈。
不自恋了,这篇说说循环列表框的实现思路。
我们知道,cocos2d-x扩展里面提供了一个CCScrollView的实现,这东西写的还不错,大致模拟了系统的那种滑动效果,并有裁剪的效果。对于数字选择器(NumberPicker)控件,我们首先需要在CCSrollView的基础上实现一个列表框(ListBox),列表框的实现不会太难,博文里面就不详细讲了。
ListBox提供几个简单的接口,addItem,removeItem等,那么想想该如何让这个ListBox在拖动到最顶或者最底时自动循环呢?
如果你的思路局限在如何往ListBox添加需要的元素以接着让ListBox能够继续滚动的话,那估计就比较难实现一个高效的循环列表了。
在实现循环列表之前,我首先想到的实现一个平衡列表——列表框的中心部分作为平衡锚点,如果列表上移或者下移,导致列表不再平衡,则调整列表元素位置,使之保持平衡状态。
对于循环列表,如果往下移,每下移一格作为非平衡的判定条件,此时将顶部元素移动到最下部,并重置ScrollView的offset。
由于这种设计不涉及元素(精灵、纹理)的增删操作,只是在某一帧设置元素的位置,效率是非常高的,最初在设计时有些担心重置元素时存在抖动问题,但最终显示效果还是很平滑的。
不自恋了,这篇说说循环列表框的实现思路。
我们知道,cocos2d-x扩展里面提供了一个CCScrollView的实现,这东西写的还不错,大致模拟了系统的那种滑动效果,并有裁剪的效果。对于数字选择器(NumberPicker)控件,我们首先需要在CCSrollView的基础上实现一个列表框(ListBox),列表框的实现不会太难,博文里面就不详细讲了。
ListBox提供几个简单的接口,addItem,removeItem等,那么想想该如何让这个ListBox在拖动到最顶或者最底时自动循环呢?
如果你的思路局限在如何往ListBox添加需要的元素以接着让ListBox能够继续滚动的话,那估计就比较难实现一个高效的循环列表了。
在实现循环列表之前,我首先想到的实现一个平衡列表——列表框的中心部分作为平衡锚点,如果列表上移或者下移,导致列表不再平衡,则调整列表元素位置,使之保持平衡状态。
对于循环列表,如果往下移,每下移一格作为非平衡的判定条件,此时将顶部元素移动到最下部,并重置ScrollView的offset。
由于这种设计不涉及元素(精灵、纹理)的增删操作,只是在某一帧设置元素的位置,效率是非常高的,最初在设计时有些担心重置元素时存在抖动问题,但最终显示效果还是很平滑的。
相关文章推荐
- cocos2d-x之CCGUI设计与实现(1)序言
- cocos2d-x之CCGUI设计与实现(2)RichTextBox的实现(支持多颜色、表情、超链接)
- cocos2d-x之CCGUI设计与实现(4)分页列表框的实现(仿IOS图标分页列表)
- cocos2d-x之CCGUI设计与实现(1)序言
- cocos2d-x之CCGUI设计与实现(5)树形控件的实现
- cocos2d-x之CCGUI设计与实现(1)序言
- GUI 主循环设计及其在 MiniGUI, GTK, QT 的实现
- 数字电路设计之循环右移的verilog实现
- GUI 主循环设计及其在 MiniGUI, GTK, QT 的实现
- GUI 主循环设计及其在 MiniGUI, GTK, QT 的实现
- GUI 主循环设计及其在 MiniGUI, GTK, QT 的实现
- GUI 主循环设计及其在 MiniGUI, GTK, QT 的实现
- GUI 主循环设计及其在 MiniGUI, GTK, QT 的实现
- /LGC设计模式/GUI 主循环设计及其在 MiniGUI, GTK, QT 的实现
- lua教程八----不用CCHttpClient而转用quick-cocos2d-x或cocos2dx-LuaProxy的Lua框架实现Lua-Http网络交互!
- 一个简单图形界面框架XYGui的设计与实现 (五)
- 数字电路设计之牛顿迭代法计算除法的verilog实现
- [CC] Cocos2d-x热更新后台实现
- 基于DVB-SI的数字有线电视机顶盒节目指南的设计实现
- 基于IOC的GUI框架设计与实现