cocos2d-x之CCGUI设计与实现(3)循环列表框的实现(数字选择器)

来源:互联网 发布:网络社交平台有哪些 编辑:程序博客网 时间:2024/05/29 16:19

真心不好意思,为了防止CSDN把我的彩色“恒”弄成灰白的,每月预先会标记几篇博客充数哈哈。

不自恋了,这篇说说循环列表框的实现思路。

我们知道,cocos2d-x扩展里面提供了一个CCScrollView的实现,这东西写的还不错,大致模拟了系统的那种滑动效果,并有裁剪的效果。对于数字选择器(NumberPicker)控件,我们首先需要在CCSrollView的基础上实现一个列表框(ListBox),列表框的实现不会太难,博文里面就不详细讲了。

ListBox提供几个简单的接口,addItem,removeItem等,那么想想该如何让这个ListBox在拖动到最顶或者最底时自动循环呢?

如果你的思路局限在如何往ListBox添加需要的元素以接着让ListBox能够继续滚动的话,那估计就比较难实现一个高效的循环列表了。

在实现循环列表之前,我首先想到的实现一个平衡列表——列表框的中心部分作为平衡锚点,如果列表上移或者下移,导致列表不再平衡,则调整列表元素位置,使之保持平衡状态。

对于循环列表,如果往下移,每下移一格作为非平衡的判定条件,此时将顶部元素移动到最下部,并重置ScrollView的offset。

由于这种设计不涉及元素(精灵、纹理)的增删操作,只是在某一帧设置元素的位置,效率是非常高的,最初在设计时有些担心重置元素时存在抖动问题,但最终显示效果还是很平滑的。