关于滑动菜单的问题

  • 本帖最后由 般若sod蜜 于 2012-5-17 11:56 编辑 *

大家好,我是cocos2d-x的初学者,我遇到了这样的问题:我利用这里的CCScrollLayer类创建了一个滑动菜单,http://www.cocos2d-x.org/boards/18/topics/1090 ,并将原来的数组类型CCLayer* 改为了CCSprite*

static CCScrollLayer* layerWithLayers(CCMutableArray<CCSprite*> *layers,int widthOffset);
bool initWithLayers(CCMutableArray<CCSprite*> *layers,int widthOffset);

之后又在自己的场景中添加了以下代码:

for(int i = 0; i <= 7; ++i)
    {
        stringstream thumbPng;
        thumbPng << i << "_thumb.png";
        CCSprite* pSprite = CCSprite::spriteWithFile(thumbPng.str().c_str());

        pSprite->setUserData((void*)i);
//CCLog("%d",(int)pSprite->getUserData());

        cars.addObject(pSprite);
//CCLog("cars%d",(int)cars.getObjectAtIndex(i)->getUserData());
    }
//使用CCScrollLayer类,实现滑动效果
CCScrollLayer* slideMenu = CCScrollLayer::layerWithLayers(&cars, 0);
    slideMenu->setPosition ( CCPointZero );
    this->addChild(slideMenu);

我想在ccTouchEnded事件中判定所选的是哪个精灵,我是这么写的:

for(int i = 0; i < cars.count(); ++i)
    {

        if( CCRect::CCRectContainsPoint(cars.getObjectAtIndex(i)->boundingBox(),CCPoint::CCPoint(location.x, location.y)))
        {
            int id = (int)cars.getObjectAtIndex(i)->getUserData();
            CCLog("%d",id);
            return;
        }
    }

问题在于,我拖动滑动菜单,点击摆放在最后的精灵,ccTouchEnded事件中的CCLog("%d",id);只能输出:0,做了一下测试,输出的id最大只能是当前屏幕显示精灵总数减去1,这样就起不到判断选择的是哪一个的作用了。

谢谢大家的解答。

没用过这个CCScrollLayer,不过滑动菜单你可以用CCTableView(有人自己写的,在英文论坛可以下到),用着效果不错,或者说,如果只是列表的话,你可以自己写一个layer,通过改变layer的坐标实现

— Begin quote from ____

红光 发表于 2012-5-17 12:23 url

没用过这个CCScrollLayer,不过滑动菜单你可以用CCTableView(有人自己写的,在英文论坛可以下到),用着效果 …

— End quote

谢谢你的回答,但是你好像没有好好看内容,CCTableView实现的好像是拖动层的效果,我说的是滑动菜单。我的问题是,为什么下边的代码只能判断当前屏幕中的第几个,而不能判断是数组中的第几个,或者说我想点击后获得该精灵的userData应该如何实现

for(int i = 0; i < cars.count(); ++i)
    {

        if( CCRect::CCRectContainsPoint(cars.getObjectAtIndex(i)->boundingBox(),CCPoint::CCPoint(location.x, location.y)))
        {
            int id = (int)cars.getObjectAtIndex(i)->getUserData();
            CCLog("%d", id);
            return;
        }
    }

大侠们,我再描述一下问题:
我利用CCScrollLayer类创建了一个滑动菜单,我将用到的备选图标都存放在了CCMutableArray<CCSprite*>数组中,我存放的数组中一共有8个元素,滑动菜单的一页能显示5个,在ccTouchEnded中我利用cars.getObjectAtIndex(i)->boundingBox()来判断点击的是哪一个图标,但是当我拖动菜单让最后一个图标能在屏幕上显示的时候,我点击该图标,应该输出的是7,但是程序的结果是4,请大神们帮帮忙,帮我解开疑惑,谢谢。