[cocos2dx]计算scrollview元素的index
2013-10-12 12:48
274 查看
scrollview的原生代码没有提供元素对齐功能
通过下面介绍的index计算方法以及scrollview自带的设置位置方法
void setContentOffsetInDuration(CCPoint offset, float dt);
我们便可以轻松实现元素对齐功能。
一、scrollview界面设计
容器选用CCMenu,屏幕高度为640,每个item之间间距为320。
item的y坐标设置为itemHeight * (1-i);
屏幕中部的index为默认值
效果设计如图所示
![](http://images.cnitblog.com/blog/560493/201310/12125447-b207d271d334421797feab262c202dae.png)
index 为 0 的情况
![](http://images.cnitblog.com/blog/560493/201310/12122739-4b39b72f0c6c4c2399342bc3072ae2de.png)
index为1的情况
![](http://images.cnitblog.com/blog/560493/201310/12122750-eee6269271cc49669612b0179e2f1c9c.png)
由此可得一个对应关系
![](http://images.cnitblog.com/blog/560493/201310/12125601-9c333fd8ac5e4079b701d0f3f661d4e0.png)
所以有
但是由于强制转换的算法限制,在正数范围内此方法成立,在值为负数时情况有所不同
当值在-1.5~0.5之间时,加上0.5转成int的值为0;在-2.5~-1.5之间时则为1,如此类推。
例如int test = -1.2 + 0.5; //结果test为0
此时我们可以加上一个较大的数将其转换成正数,最后再减去该数即可
通过下面介绍的index计算方法以及scrollview自带的设置位置方法
void setContentOffsetInDuration(CCPoint offset, float dt);
我们便可以轻松实现元素对齐功能。
一、scrollview界面设计
容器选用CCMenu,屏幕高度为640,每个item之间间距为320。
item的y坐标设置为itemHeight * (1-i);
屏幕中部的index为默认值
效果设计如图所示
![](http://images.cnitblog.com/blog/560493/201310/12125447-b207d271d334421797feab262c202dae.png)
index 为 0 的情况
![](http://images.cnitblog.com/blog/560493/201310/12122739-4b39b72f0c6c4c2399342bc3072ae2de.png)
index为1的情况
![](http://images.cnitblog.com/blog/560493/201310/12122750-eee6269271cc49669612b0179e2f1c9c.png)
由此可得一个对应关系
![](http://images.cnitblog.com/blog/560493/201310/12125601-9c333fd8ac5e4079b701d0f3f661d4e0.png)
所以有
float itemHeight = 320.0f; float value = scrollView->getContentOffset().y / itemHeight; int index = value + 0.5;
但是由于强制转换的算法限制,在正数范围内此方法成立,在值为负数时情况有所不同
当值在-1.5~0.5之间时,加上0.5转成int的值为0;在-2.5~-1.5之间时则为1,如此类推。
例如int test = -1.2 + 0.5; //结果test为0
此时我们可以加上一个较大的数将其转换成正数,最后再减去该数即可
float itemHeight = 320.0f; float value = scrollView->getContentOffset().y / itemHeight; value += 100; int index = value + 0.5; //此情况错误:int index = value + 0.5 - 100; index -= 100;
相关文章推荐
- [cocos2dx]计算scrollview元素的index
- 【lua-cocos2dx游戏开发】Lua查找表元素过程(元表、__index方法是如何工作的)
- 关于插入排序元素之间比较次数的计算
- 输入若干个整数输入是-1时,输入结束;后计算所有元素之和及平均值
- Webpack打包css后z-index被重新计算的解决方法
- Lua查找表元素过程(元表、__index方法是如何工作的)
- 计算矩阵边缘元素之和
- :计算矩阵边缘元素之和
- 如何计算一个整形数组里的连续元素和的最大值?
- 点击每一个元素使其zIndex层叠高一层的写法
- 计算ScrollView的当前页面
- (六十七)ScrollView与ListView合用(正确计算Listview的高度)的问题解决
- OPTIMIZER_INDEX_COST_ADJ与成本计算
- Matlab Tricks(十八)—— 矩阵间元素距离的计算
- python中计算一个列表中连续相同的元素个数
- enumerate() ——循环同时枚举元素和index
- Lua查找表元素过程(元表、__index方法是如何工作的)
- 用单循环链表存储一个环上的数据,并计算任意两个相邻元素之差是否超过2
- C 语言 实现双向链表 模拟ArrayList功能 可追加,插入,移除,得到指定index 的元素值
- jQuery DOM 元素方法 - index() 方法在轮播图中的应用!!!