您的位置:首页 > 移动开发 > Cocos引擎

[cocos2dx]计算scrollview元素的index

2014-09-22 14:45 183 查看
scrollview的原生代码没有提供元素对齐功能

通过下面介绍的index计算方法以及scrollview自带的设置位置方法
void setContentOffsetInDuration(CCPoint offset, float dt);
我们便可以轻松实现元素对齐功能。
一、scrollview界面设计

容器选用CCMenu,屏幕高度为640,每个item之间间距为320。

item的y坐标设置为itemHeight * (1-i);

屏幕中部的index为默认值

效果设计如图所示


 

index 为 0 的情况



index为1的情况



 

由此可得一个对应关系



所以有

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;


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: