[cocos2dx]计算scrollview元素的index

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;

 

posted @ 2013-10-12 12:48  CreeperChange  阅读(1055)  评论(0编辑  收藏  举报